replacePatterns function

String replacePatterns(
  1. String input,
  2. Map data, {
  3. ReplacePatternsSettings settings = const ReplacePatternsSettings(),
})

Replaces placeholders in a string with corresponding values from a provided map, supporting default values and custom delimiters.

Implementation

String replacePatterns(
  String input,
  Map data, {
  ReplacePatternsSettings settings = const ReplacePatternsSettings(),
}) {
  var output = input;
  final regex = RegExp(
    '${RegExp.escape(settings.opening)}(.*?)${RegExp.escape(settings.closing)}',
  );
  final matches = regex.allMatches(input);
  for (final match in matches) {
    final fullMatch = match.group(0)!;
    final keyWithDefault = match.group(1)!;
    final parts = keyWithDefault.split(settings.delimiter);
    final e0 = parts.elementAtOrNull(0);
    final e1 = parts.elementAtOrNull(1);
    final key = (e1 ?? e0)!;
    final defaultValue = e0 ?? key;
    final data1 = settings.caseSensitive
        ? data
        : data.map((k, v) => MapEntry(k.toString().toLowerCase(), v));
    final key1 = settings.caseSensitive ? key : key.toLowerCase();
    final suggestedReplacementValue = data1[key1];
    final replacementValue =
        settings.callback?.call(key, suggestedReplacementValue, defaultValue) ??
            suggestedReplacementValue?.toString() ??
            defaultValue;
    output = output.replaceFirst(fullMatch, replacementValue);
  }

  return output;
}