diff --git a/app/src/main/java/io/legado/app/data/entities/BookChapter.kt b/app/src/main/java/io/legado/app/data/entities/BookChapter.kt index c58ace49c..8e3f9d745 100644 --- a/app/src/main/java/io/legado/app/data/entities/BookChapter.kt +++ b/app/src/main/java/io/legado/app/data/entities/BookChapter.kt @@ -103,7 +103,7 @@ data class BookChapter( displayTitle.replaceRegex( item.pattern, item.replacement - ) + ).getOrThrow() } else { displayTitle.replace(item.pattern, item.replacement) } diff --git a/app/src/main/java/io/legado/app/help/book/ContentProcessor.kt b/app/src/main/java/io/legado/app/help/book/ContentProcessor.kt index f1b118c84..a6acfeeb4 100644 --- a/app/src/main/java/io/legado/app/help/book/ContentProcessor.kt +++ b/app/src/main/java/io/legado/app/help/book/ContentProcessor.kt @@ -144,7 +144,7 @@ class ContentProcessor private constructor( mContent.replaceRegex( item.pattern, item.replacement - ) + ).getOrThrow() } else { mContent.replace(item.pattern, item.replacement) } diff --git a/app/src/main/java/io/legado/app/utils/RegexExtensions.kt b/app/src/main/java/io/legado/app/utils/RegexExtensions.kt index 467d8b3ca..d6e7a4421 100644 --- a/app/src/main/java/io/legado/app/utils/RegexExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/RegexExtensions.kt @@ -1,6 +1,5 @@ package io.legado.app.utils -import android.util.Log import com.google.re2j.Pattern import com.script.SimpleBindings import io.legado.app.constant.AppConst @@ -8,26 +7,27 @@ import io.legado.app.constant.AppConst /** * 带有超时检测的正则替换 */ -fun CharSequence.replaceRegex(regex: String, replacement: String): String { - val charSequence = this - val isJs = replacement.startsWith("@js:") - val replacement1 = if (isJs) replacement.substring(4) else replacement - val pattern = Pattern.compile(regex) - val matcher = pattern.matcher(charSequence) - val stringBuffer = StringBuffer() - while (matcher.find()) { - if (isJs) { - val bindings = SimpleBindings() - bindings["result"] = matcher.group() - val jsResult = - AppConst.SCRIPT_ENGINE.eval(replacement1, bindings).toString() - matcher.appendReplacement(stringBuffer, jsResult) - } else { - matcher.appendReplacement(stringBuffer, replacement1) +fun CharSequence.replaceRegex(regex: String, replacement: String): Result { + return kotlin.runCatching { + val charSequence = this + val isJs = replacement.startsWith("@js:") + val replacement1 = if (isJs) replacement.substring(4) else replacement + val pattern = Pattern.compile(regex) + val matcher = pattern.matcher(charSequence) + val stringBuffer = StringBuffer() + while (matcher.find()) { + if (isJs) { + val bindings = SimpleBindings() + bindings["result"] = matcher.group() + val jsResult = + AppConst.SCRIPT_ENGINE.eval(replacement1, bindings).toString() + matcher.appendReplacement(stringBuffer, jsResult) + } else { + matcher.appendReplacement(stringBuffer, replacement1) + } } + matcher.appendTail(stringBuffer) + stringBuffer.toString() } - matcher.appendTail(stringBuffer) - Log.e("regex", "end") - return stringBuffer.toString() }