Restore using Pattern in String.replace but with Unicode case folding

KT-43745
diff --git a/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt b/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt
index 3245ad2..fd43415 100644
--- a/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt
+++ b/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt
@@ -77,7 +77,17 @@
  */
 @Suppress("ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS")
 public actual fun String.replace(oldValue: String, newValue: String, ignoreCase: Boolean = false): String {
-    run {
+    if (ignoreCase) {
+        val matcher = Pattern.compile(oldValue, Pattern.LITERAL or Pattern.CASE_INSENSITIVE or Pattern.UNICODE_CASE).matcher(this)
+        if (!matcher.find()) return this
+        val stringBuilder = StringBuilder()
+        var i = 0
+        do {
+            stringBuilder.append(this, i, matcher.start()).append(newValue)
+            i = matcher.end()
+        } while (matcher.find())
+        return stringBuilder.append(this, i, length).toString()
+    } else {
         var occurrenceIndex: Int = indexOf(oldValue, 0, ignoreCase)
         // FAST PATH: no match
         if (occurrenceIndex < 0) return this