diff --git a/app/src/main/assets/txtTocRule.json b/app/src/main/assets/txtTocRule.json index 127f5648f..4469235a2 100644 --- a/app/src/main/assets/txtTocRule.json +++ b/app/src/main/assets/txtTocRule.json @@ -38,14 +38,14 @@ "id": -6, "enable": true, "name": "数字 分隔符 标题名称", - "rule": "^[  \\t]{0,4}\\d{1,5}[,., 、_—\\-].{1,30}$", + "rule": "^[  \\t]{0,4}\\d{1,5}[::,., 、_—\\-].{1,30}$", "serialNumber": 5 }, { "id": -7, "enable": true, "name": "大写数字 分隔符 标题名称", - "rule": "^[  \\t]{0,4}[零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]{1,8}[ 、_—\\-].{1,30}$", + "rule": "^[  \\t]{0,4}(?:序章|楔子|正文(?!完|结)|终章|后记|尾声|番外|[零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]{1,8})[ 、_—\\-].{1,30}$", "serialNumber": 6 }, { diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index 0086a6e57..8cd9937f5 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -447,46 +447,45 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { else -> rule = ruleStr } } - if (mode == Mode.Js) { - ruleType.add(defaultRuleType) - ruleParam.add(rule) - } else { - //分离put - rule = splitPutRule(rule, putMap) - //@get,{{ }}, 拆分 - var start = 0 - var tmp: String - val evalMatcher = evalPattern.matcher(rule) - while (evalMatcher.find()) { - if (evalMatcher.start() > start) { - tmp = rule.substring(start, evalMatcher.start()) - if (start == 0 && !tmp.contains("##")) { - mode = Mode.Regex - } - splitRegex(tmp) - } else if (evalMatcher.start() == 0) { + //分离put + rule = splitPutRule(rule, putMap) + //@get,{{ }}, 拆分 + var start = 0 + var tmp: String + val evalMatcher = evalPattern.matcher(rule) + while (evalMatcher.find()) { + if (evalMatcher.start() > start) { + tmp = rule.substring(start, evalMatcher.start()) + if (mode != Mode.Js && mode != Mode.Json && mode != Mode.Regex + && start == 0 && !tmp.contains("##") + ) { mode = Mode.Regex } - tmp = evalMatcher.group() - when { - tmp.startsWith("@get:", true) -> { - ruleType.add(getRuleType) - ruleParam.add(tmp.substring(6, tmp.lastIndex)) - } - tmp.startsWith("{{") -> { - ruleType.add(jsRuleType) - ruleParam.add(tmp.substring(2, tmp.length - 2)) - } - else -> { - splitRegex(tmp) - } - } - start = evalMatcher.end() - } - if (rule.length > start) { - tmp = rule.substring(start) splitRegex(tmp) + } else if (mode != Mode.Js && mode != Mode.Json && mode != Mode.Regex + && evalMatcher.start() == 0 + ) { + mode = Mode.Regex + } + tmp = evalMatcher.group() + when { + tmp.startsWith("@get:", true) -> { + ruleType.add(getRuleType) + ruleParam.add(tmp.substring(6, tmp.lastIndex)) + } + tmp.startsWith("{{") -> { + ruleType.add(jsRuleType) + ruleParam.add(tmp.substring(2, tmp.length - 2)) + } + else -> { + splitRegex(tmp) + } } + start = evalMatcher.end() + } + if (rule.length > start) { + tmp = rule.substring(start) + splitRegex(tmp) } } @@ -499,7 +498,9 @@ class AnalyzeRule(var book: BaseBook? = null) : JsExtensions { val ruleStrArray = ruleStr.split("##") val regexMatcher = regexPattern.matcher(ruleStrArray[0]) while (regexMatcher.find()) { - mode = Mode.Regex + if (mode != Mode.Js && mode != Mode.Regex) { + mode = Mode.Regex + } if (regexMatcher.start() > start) { tmp = ruleStr.substring(start, regexMatcher.start()) ruleType.add(defaultRuleType)