IZN Tools

Тестер регулярных выражений

Совпадения и группы захвата в реальном времени, со шпаргалкой рядом.

//g
ТЕКСТ ДЛЯ ПРОВЕРКИ
СОВПАДЕНИЯ
нет совпадений
Результат появится здесь по мере ввода.
Посчитано на вашем устройстве
Похожие
Форматирование JSONКодирование в Base64Декодер JWTURL-кодированиеСкороГенератор ЧПУ-адресовСкороВалидатор JSONСкоро

Что на самом деле меняют флаги

| Флаг | Действие | Когда нужен | | --- | --- | --- | | g | Искать все совпадения, а не первое | Почти всегда при отладке | | i | Без учёта регистра | Пользовательский ввод, домены, ключевые слова | | m | ^ и $ работают на каждой строке | Построчный текст, разбор логов | | s | . захватывает и перенос строки | Совпадение через многострочный блок | | u | Режим Unicode | \d, \w и \p{...} за пределами ASCII; обязателен для \p{L} |

Чаще всего забывают именно u. Без него \d совпадает только с 0-9, а \w — только с ASCII: для машинного формата нормально, но неверно ровно в тот момент, когда человек вводит своё имя.

Как пользоваться

  1. Наберите шаблон между слэшами. Флаги — кнопки рядом.
  2. Слева вставьте текст, по которому идёт поиск.
  3. Справа совпадения подсвечиваются, а таблица ниже перечисляет каждое с позицией и группами захвата.
[ SCREENSHOT — regex-tester ]
Именованные группы выводятся как имя=значение, а не порядковым номером.

Коротко о катастрофическом бэктрекинге

Шаблон вида (a+)+$ на длинной строке из символов a может работать экспоненциальное время: движок перебирает все способы разбить вход, прежде чем сдаться. На сервере, где шаблон применяется к пользовательскому вводу, это настоящий вектор отказа в обслуживании. Признак — вложенные квантификаторы над пересекающимися вариантами. Если шаблон подвешивает предпросмотр здесь, не выпускайте его: перепишите так, чтобы каждый символ поглощался единственным способом.

Вопросы

Какой это диалект регулярных выражений?+

JavaScript — потому что шаблон исполняет собственный движок RegExp вашего браузера. Это важно: в JavaScript нет possessive-квантификаторов, в старых Safari нет lookbehind, а \d без флага u совпадает только с ASCII-цифрами. Шаблон, работающий здесь, будет работать в Node и в браузере, но не обязательно в PCRE, Python или Go.

Почему поиск остановился на 500 совпадениях?+

Это намеренное ограничение. Широкий шаблон на длинном тексте может дать десятки тысяч совпадений, и отрисовка всех подвесит вкладку. Строка состояния сообщает, что список обрезан; лучше уточнить шаблон, чем поднимать лимит.

Что происходит с совпадением нулевой длины?+

Шаблоны вроде a*, \b или пустой группы совпадают, не поглощая символ, из-за чего наивный цикл крутится вечно. Этот инструмент сдвигается на позицию вперёд после каждого пустого совпадения, поэтому вы видите по одному результату на позицию, а страница остаётся отзывчивой.

Поддерживаются ли именованные группы?+

Да, (?<name>...) работает, и в колонке групп выводится имя=значение, а не порядковый номер. Именованные группы стоят лишних символов: они переживают вставку чужой группы перед вашей.