Редактор RegExp
Пишите регулярное выражение — совпадения подсвечиваются в реальном времени, каждый токен паттерна разбирается ниже. Плюс справочник готовых выражений для email, телефонов, дат, IP и других частых случаев.
01
Редактор и подсветка
02
Разбор шаблона по токенам
каждый символ шаблона — с назначением03
Готовые выражения — библиотека
клик по примеру — подставит шаблон и тестовый текстEmail
/[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}/g
Телефон РФ
/(?:\+7|8)[\s\-]?\(?\d{3}\)?[\s\-]?\d{3}[\s\-]?\d{2}[\s\-]?\d{2}/g
Телефон международный
/\+[1-9]\d{0,2}[\s\-]?\(?\d{1,4}\)?[\s\-]?\d{1,4}[\s\-]?\d{1,9}/g
URL
/https?:\/\/[\w\-]+(\.[\w\-]+)+([\w\-.,@?^=%&:/~+#]*[\w\-@?^=%&/~+#])?/gi
04
О регулярных выражениях
Синтаксис RegExpJS-flavor
/pattern/flags · new RegExp('p', 'g')
Регулярные выражения — язык для поиска и замены по шаблону. В JavaScript используется свой диалект (PCRE-inspired). Ключевые части: якоря (^ $ \b), классы (\d \w \s . [ ]), квантификаторы (* + ? {n,m}), группы (( ) (?: )), альтернатива (|).
Флагиgimsuy
g · глобально · i · регистр · m · строки
g — искать все совпадения, а не только первое. i — регистронезависимо. m — ^ и $ работают на каждой строке отдельно. s — точка совпадает с \n. u — Unicode. y — sticky (только с позиции lastIndex). Флаги комбинируются: /.../gim.
Жадные vs ленивыеBacktracking
.* — жадно · .*? — лениво
Квантификаторы по умолчанию жадные — забирают максимум. Добавьте ? — станут ленивыми, возьмут минимум. Классический пример: .* в /<.*>/ на «<a><b>» захватит «<a><b>», а .*? — только «<a>». Для парсинга HTML лучше использовать специальные парсеры.
Осторожно с производительностьюReDoS
(a+)+ на «aaaaX» — экспоненциальное время
Некоторые паттерны могут висеть на миллионах итераций backtracking (ReDoS-атака). Опасны вложенные квантификаторы вроде (a+)+ или (a|a)*. Пишите атомарные шаблоны, тестируйте на длинных входах. В критичных местах — RE2 (Go, Google), который не имеет backtracking.