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