replacePatterns function
String
replacePatterns(
- String input,
- Map data, {
- 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;
}