🔎
Код

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

Тестер регулярных выражений
/ /
$1, $2 — номера групп, $<название> — именованная группа, $& — всё совпадение
Результат

        

Выражение выполняется в вашем браузере, в отдельном потоке и с ограничением времени. Поэтому даже регулярка, которая зацикливается, не подвесит страницу — вы просто увидите предупреждение.

Об инструменте: проверка регулярных выражений

Регулярное выражение редко выходит правильным с первого раза, а проверять его прямо в коде долго. Этот инструмент показывает совпадения сразу во время набора: подсвечивает найденное в тексте, разбирает каждое совпадение на группы и умеет показать результат замены. Здесь нет сторонней рекламы и регистрации.

Всё выполняется в вашем браузере — ни выражение, ни текст не отправляются на сервер.

Главные преимущества инструмента:

  • Зациклившееся выражение не подвесит страницу: поиск идёт в отдельном потоке с ограничением времени. Это редкость среди онлайн-тестеров, а проблема вполне реальная — ниже объясняем, почему.

  • Группы видны отдельно: под каждым совпадением перечислены нумерованные и именованные группы, поэтому сразу понятно, что именно попадёт в $1 или $<название>.

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

Флаги

  • g — искать все совпадения, а не только первое. Без него инструмент покажет одну находку.

  • i — не учитывать регистр букв.

  • m — многострочный режим: ^ и $ начинают означать начало и конец каждой строки, а не всего текста.

  • s — точка начинает совпадать и с символом переноса строки.

  • u — корректная работа с юникодом. Нужен, если в выражении есть \p{...} или символы вне базовой латиницы.

  • y — липкий поиск: совпадение должно начинаться ровно с текущей позиции.

Почему плохое выражение может повесить браузер

Это называют катастрофическим бэктрекингом. Когда в выражении вложенные повторения, как в (a+)+$, движок перебирает все возможные способы разбить строку. Количество вариантов растёт вдвое с каждым символом, поэтому уже на трёх десятках букв вычисление длится дольше, чем вы готовы ждать.

В обычном тестере такое выражение намертво вешает вкладку, и спасёт лишь её закрытие: остановить уже выполняющуюся регулярку невозможно. Поэтому здесь поиск вынесен в отдельный поток, и если он не укладывается в полторы секунды, поток просто останавливается, а вы видите предупреждение вместо зависания.

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

Несколько практических советов

  • Начинайте с малого: составьте выражение для одного случая, а затем расширяйте, каждый раз сверяясь со списком совпадений.

  • Вместо точки берите конкретнее: [^,]+ работает быстрее и предсказуемее, чем .+, и реже даёт катастрофический бэктрекинг.

  • Именованные группы читабельнее: (?<year>\d{4}) в коде понятнее, чем $1, особенно когда групп несколько.

  • Не разбирайте HTML регулярками: вложенные теги невозможно описать регулярным выражением в принципе. Для этого есть парсеры.