splitTextRange function
Implementation
List<String> splitTextRange(String pattern, List<String> splitText,
{List<int>? cacheRange,
int mode =
3 // 1: Biggest(最大覆盖,两端的匹配片段可能未被完全匹配) 2: Smallest(最小覆盖,裁减掉两端多余匹配) 3:必须正好
}) {
cacheRange ??= range(splitText);
var m = RegExp(pattern).firstMatch(splitText.join());
if (m != null) {
var start = 0;
var hasStart = false;
for (; start <= splitText.length; start++) {
if (mode == 3 && cacheRange[start] == m.start) {
hasStart = true;
break;
} else if (mode == 2 && cacheRange[start] >= m.start) {
hasStart = true;
break;
} else if (mode == 1 &&
cacheRange[start] <= m.start &&
(start + 1 == cacheRange.length || cacheRange[start + 1] > m.start)) {
hasStart = true;
break;
}
}
if (hasStart) {
var end = start;
var hasEnd = false;
for (; end <= splitText.length; end++) {
if (mode == 3 && cacheRange[end] == m.end) {
hasEnd = true;
break;
} else if (mode == 2 &&
cacheRange[end] <= m.end &&
(end + 1 == cacheRange.length || cacheRange[end + 1] > m.end)) {
hasEnd = true;
break;
} else if (mode == 1 && cacheRange[end] >= m.end) {
hasEnd = true;
break;
}
}
if (hasEnd) {
return splitText.sublist(start, end);
}
}
}
return [];
}