абстрактный метод replaceAllMapped
Заменяет все подстроки, соответствующие from, вычисляемой строкой.
Создает новую строку, в которой непересекающиеся подстроки, соответствующие from (те, по которым выполняется итерация с помощью from.allMatches(thisString)), заменяются результатом вызова replace для соответствующего объекта Match.
Это позволяет заменять совпадения новым содержимым, зависящим от совпадения, в отличие от replaceAll, где строка замены всегда одинакова.
Функция replace вызывается с объектом Match, созданным шаблоном, а ее результат используется в качестве замены.
Функция, определенная ниже, преобразует каждое слово в строке в упрощенную «поросячью латынь» с помощью replaceAllMapped:
String pigLatin(String words) => words.replaceAllMapped(
RegExp(r'\b(\w*?)([aeiou]\w*)', caseSensitive: false),
(Match m) => "${m[2]}${m[1]}${m[1]!.isEmpty ? 'way' : 'ay'}");
final result = pigLatin('I have a secret now!');
print(result); // 'Iway avehay away ecretsay ownay!' Реализация
String replaceAllMapped(Pattern from, String Function(Match match) replace);
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-core/String/replaceAllMapped.html