Метод replaceAllMapped
Заменяет все подстроки, которые соответствуют from, вычисленной строкой.
Создаёт новую строку, в которой все неперекрывающиеся подстроки, соответствующие from (те, по которым итерируется from.allMatches(thisString)), заменяются результатом вызова replace для соответствующего объекта Match.
Это можно использовать для замены совпадений новым содержимым, которое зависит от совпадения, в отличие от replaceAll, где строка замены всегда одинаковая.
Функция replace вызывается с Match, сгенерированным шаблоном, а её результат используется в качестве замены.
Функция, определённая ниже, преобразует каждое слово в строке в упрощённый «pig latin» с использованием 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.18.5/dart-core/String/replaceAllMapped.html