RegExp class - класс для работы с регулярными выражениями

14.05.2019
Статья написана для старой версии Flutter и сейчас обновляется. Часть кода может не компилироваться на актуальной версии.

Регулярные выражения – это шаблоны, которые используются для нахождения сопоставлений строк и их частей, для дальнейшей обработки.

Регулярные выражения Dart имеют тот же синтаксис и семантику, что и регулярные выражения JavaScript. http://ecma-international.org/ecma-262/5.1/#sec-15.10 для спецификации регулярных выражений JavaScript.

firstMatch - это основной метод реализации, который применяет регулярное выражение к строке и возвращает первое совпадение. Все другие методы в RegExp могут опираться на него.

Используйте allMatches для поиска всех совпадений регулярного выражения в строке.

Следующий пример находит все совпадения регулярного выражения в строке.

RegExp exp =  RegExp(r"(\w+)");
String str = "Parse my string";
Iterable matches = exp.allMatches(str);

matches.forEach((key) => print(str.substring(key.start, key.end)));
/* результат:
Parse
my
string
*/

Обратите внимание на использование необработанной строки (строка с префиксом r ) в приведенном выше примере. Используйте необработанную строку для обработки каждого символа в строке как литерального символа.

RegExp - примеры регулярных выражений Dart для удаления символов из строк

Удалить из строки спецсимволы и знаки препинания

RegExp exp = RegExp(r"[^\w\s]+");//оставить символы: 0-9, a-z, A-Z и пробел (\s)
String str = 'Ok Google, let`s play a game 007.';
String res = str.replaceAll(exp, '');//заменить в строке str все что не попало под выражение [^\w\s], на пустую строку - т.е. удалить символы
print('res: $res');//результат: Ok Google lets play a game 007

Убрать все символы, кроме латиницы и кириллицы

RegExp exp = RegExp(r"[^a-zA-Zа-яА-Я]+");
String str = 'Ok Google, давай сыграем в игру 007.';
String res = str.replaceAll(exp, '');
print('res: $res');//результат: OkGoogleдавайсыграемвигру

Удалить все символы из строки кроме чисел

RegExp exp = RegExp(r"[^0-9]+");
String str = '+7 (123) 000-00-00';
String res = str.replaceAll(exp, '');
print('res: $res');//71230000000

Если нужно в номере телефона оставить символы: плюс "+" и пробел " "

RegExp exp = RegExp(r"[^+ 0-9]+");//или RegExp(r"[^+\s0-9]+");
String str = '+7 (123) 000-00-00';
String res = str.replaceAll(exp, '');
print('res: $res');//+7 123 0000000