splitTextRange function

List<String> splitTextRange(
  1. String pattern,
  2. List<String> splitText, {
  3. List<int>? cacheRange,
  4. int mode = 3,
})

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 [];
}