Тестер регулярных выражений
Проверяйте регулярные выражения с живой подсветкой совпадений и групп
Об этом инструменте
Напишите шаблон, вставьте образец текста — и каждое совпадение подсвечивается по мере набора, а ниже перечислены группы захвата, именованные группы и позиции совпадений. Тестер использует движок RegExp из JavaScript, поэтому поведение в точности совпадает с Node.js и браузерами, включая lookbehind, именованные группы и экранирование свойств Unicode.
Флаги переключаются по буквам (g, i, m, s, u, y, d), а шаблон компилируется при каждом нажатии клавиши; синтаксические ошибки всплывают немедленно с сообщением самого движка, а не после нажатия кнопки. Шаблоны с пустыми совпадениями вроде a* обрабатываются безопасно, а разгулявшийся ввод ограничен 10 000 совпадений, так что случайный .* не подвесит вкладку.
Диалекты регулярных выражений различаются между движками — шаблон, работающий здесь, может потребовать правок для PCRE, RE2 или модуля re в Python, в основном в части поддержки lookbehind, притяжательных квантификаторов и встроенных флагов.
Частые вопросы
- Какой диалект регулярных выражений использует этот тестер?
- ECMAScript (JavaScript) в реализации вашего собственного браузера. Поддерживаются lookahead, lookbehind, именованные группы захвата, обратные ссылки и экранирование свойств Unicode вроде \p{Letter} (с флагом u). Не поддерживается синтаксис, существующий только в PCRE, например притяжательные квантификаторы или рекурсия.
- Почему мой шаблон совпадает со всем / ни с чем?
- Две классические причины: неэкранированный метасимвол (. совпадает с любым символом — для буквальной точки экранируйте её как \.) или мысленно забытый флаг g — этот тестер всегда находит все совпадения, но ваш код найдёт только первое, если g не установлен.
- Что такое именованные группы захвата?
- Синтаксис (?<name>...) помечает группу, чтобы читать совпадения по имени, а не по позиции: match.groups.name в JavaScript. Панель групп под совпадениями показывает и нумерованные, и именованные захваты для каждого совпадения.
- Заработает ли регулярное выражение отсюда без изменений в Python или Go?
- Часто, но не всегда. Классы символов, квантификаторы и якоря переносимы; lookbehind, синтаксис именованных групп (Python использует (?P<name>...)) и встроенные флаги различаются. Движок RE2 в Go к тому же полностью отвергает обратные ссылки и lookaround.