extractTextElementsWithRegex static method

List<List<TextElement>> extractTextElementsWithRegex(
  1. List<TextElement> textElements,
  2. RegExp regExp
)

Return regex result as List<List

List<BrsTextElement> elementList = ['How', 'are', 'you', '?'];
RegExp regExp = RegExp(r'are you');
Result : elementList = ['are', 'you']

Implementation

static List<List<TextElement>> extractTextElementsWithRegex(
  List<TextElement> textElements,
  RegExp regExp,
) {
  List<List<TextElement>> listScannedText = [];
  String text = '';
  for (var textElement in textElements) {
    text +=
        '${textElements.first == textElement ? '' : ' '}${textElement.text}';
  }

  List<RegExpMatch> matchs = regExp.allMatches(text).toList();
  for (RegExpMatch match in matchs) {
    if (match.start < 0 || match.end == 0) {
      continue;
    }

    /// Rebuild the new list of TextElements
    List<TextElement> foundElements = [];
    int elementBeforeMatch = text
        .substring(0, match.start)
        .split('')
        .where((char) => char == ' ')
        .length;
    int elementBetweenMatch = text
            .substring(match.start, match.end)
            .split('')
            .where((char) => char == ' ')
            .length +
        1;

    for (int i = 0; i < elementBetweenMatch; i++) {
      if (elementBeforeMatch + i < textElements.length) {
        foundElements.add(textElements[elementBeforeMatch + i]);
      }
    }

    listScannedText.add(foundElements);
  }

  return listScannedText;
}