expand function

List<String> expand(
  1. String input
)

Implementation

List<String> expand(String input) {
  final matches = RegExp(r'\[(.*?)\]').firstMatch(input);
  if (matches == null) return [input];

  final results = <String>[];
  final range = matches.group(1)!.split('-');

  // Check if the range is numeric or character
  if (range[0].codeUnitAt(0) >= 48 && range[0].codeUnitAt(0) <= 57) {
    int lowerBound = int.parse(range[0]);
    int upperBound = int.parse(range[1]);

    for (var i = lowerBound; i <= upperBound; i++) {
      var newInput = input.replaceFirst(matches.group(0)!, i.toString());
      results.addAll(expand(newInput));
    }
  } else {
    int lowerBound = range[0].codeUnitAt(0);
    int upperBound = range[1].codeUnitAt(0);

    for (var i = lowerBound; i <= upperBound; i++) {
      var expanded = String.fromCharCode(i);
      var newInput = input.replaceFirst(matches.group(0)!, expanded);
      results.addAll(expand(newInput));
    }
  }

  return results;
}