Метод replaceAllMapped абстрактного класса
String replaceAllMapped(Замена всех подстрок, которые соответствуют from строкой, вычисляемой из совпадения.
Возвращает новую строку, в которой непересекающиеся подстроки, соответствующие from (те, которые итерируются from.allMatches(thisString)), заменяются результатом вызова replace на соответствующем объекте Match.
Это можно использовать для замены совпадений новым содержимым, которое зависит от совпадения, в отличие от replaceAll, где строка замены всегда одинаковая.
Функция replace вызывается с Match, сгенерированным шаблоном, и ее результат используется в качестве замены.
Функция, определенная ниже, преобразует каждое слово в строке в упрощённый «свинский латин» с помощью replaceAllMapped:
pigLatin(String words) => words.replaceAllMapped(
new RegExp(r'\b(\w*?)([aeiou]\w*)', caseSensitive: false),
(Match m) => "${m[2]}${m[1]}${m[1].isEmpty ? 'way' : 'ay'}");
pigLatin('I have a secret now!'); // 'Iway avehay away ecretsay ownay!'
Исходный код
String replaceAllMapped(Pattern from, String replace(Match match));
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-core/String/replaceAllMapped.html