Вы можете использовать String#replaceAllMapped
следующим образом:
final exp = new RegExp(r'\d+(?:\.\d+)?');
String message = 'test 40.40 test 20.20';
final text = message.replaceAllMapped(exp,
(Match m) => "<span>${m[0]}</span>");
print(text);
Вывод: test <span>40.40</span> test <span>20.20</span>
Здесь m
- это Match
объект, которыйМеханизм регулярных выражений находит и передает метод стрелки, где первый элемент в массиве m
вставляется между <span>
и </span>
внутри интерполированного строкового литерала в двойных кавычках.