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

Проверяем regex на своём тексте с подсветкой и группами, разбираем выражение по частям на русском языке и ловим конструкции, от которых разборщик зависает.

/ /

Что стоит знать

Совпадения и группы

Разбор выражения

Готовый код

Проверка идёт разборщиком JavaScript. В Python, PHP и Go синтаксис почти тот же, но есть отличия — например, в JavaScript нет флага x с комментариями внутри выражения.

Регулярное выражение читается тяжело даже автором, а через месяц — особенно. Мы раскладываем его на части и подписываем каждую человеческим языком: где начало строки, где группа с запоминанием, а где проверка того, что идёт дальше. Такой разбор есть у зарубежного regex101, но по-английски, а у русских тестеров его нет вовсе: они показывают подсветку и на этом заканчивают.

У регулярных выражений есть ловушка, которая роняет боевые серверы. Запись вида (a+)+b на строке из тридцати одинаковых букв заставляет разборщик перебирать разбиения по нарастающей: секунда, минута, час. Это называется катастрофическим откатом, и через него сайты кладут одной строкой в форме поиска.

Мы ищем такие конструкции в вашем выражении заранее и объясняем словами, что именно опасно. А само выражение выполняем в отдельном потоке с ограничением по времени: зависшее мы обрываем, и страница остаётся живой. Русские тестеры не делают ни того ни другого — на опасном выражении у них просто перестаёт отвечать вкладка.

Кириллица ведёт себя не так, как ждут

Сокращение \w в JavaScript означает латинскую букву, цифру или подчёркивание: русские буквы под него не попадают. Рядом с кириллицей странно срабатывает и граница слова \b. Мы замечаем такие сочетания в вашем тексте и подсказываем, чем их заменить: явным набором [а-яёА-ЯЁ] или свойствами знаков в режиме Unicode.

Группы, замена и готовый код

Совпадения показываются таблицей с позициями и группами захвата, именованные группы выводятся по именам. Отдельно включается режим замены — видно, каким станет текст. Проверенное выражение сразу собирается в готовый код для JavaScript, Python, PHP и Go: экранирование в этих языках разное, и переносить регулярку руками — обычный источник ошибок.

Проверка идёт в браузере

Ни выражение, ни текст никуда не отправляются: и то и другое часто содержит куски настоящих данных. Отсюда же скорость — результат пересчитывается по мере набора, без обращений к серверу.

Другие инструменты