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

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

/ /
Введите шаблон — здесь подсветятся все совпадения

Как пользоваться тестером регулярных выражений

Регулярное выражение (regex) — компактный синтаксис для описания правил сопоставления текста. Он используется везде: валидация форм, извлечение из логов, массовая замена, очистка данных. Но regex плотен: одна неверная буква — и смысл меняется полностью. Инструмент, который показывает совпадения прямо во время набора, экономит массу времени.

Что даёт этот инструмент

  • Подсветка в реальном времени: пока вы набираете шаблон, каждое совпадение в тестовом тексте отмечается — ни одной кнопки нажимать не нужно
  • Список совпадений: каждый найденный фрагмент текста и его позиция перечислены отдельно, удобно сверять
  • Группы захвата: подстроки, захваченные скобками, подсвечиваются разными цветами, так что можно проверить, соответствует ли группировка задуманному
  • Сообщения об ошибках: при неверном синтаксисе сообщается, какого рода ошибка (например, незакрытая скобка), а не молчаливый сбой
  • Шпаргалка: нажмите на частое шаблон (телефон, e-mail, номер удостоверения и т. д.), чтобы вставить его — не нужно писать и запоминать

Что означают пять распространённых флагов

  • g global: находить все совпадения, а не останавливаться на первом. При тестировании удобно держать включённым.
  • i игнорировать регистр: /abc/i находит ABC и Abc.
  • m многострочный: заставляет ^ и $ соответствовать началу и концу каждой строки, а не всего текста. Необходим для построчной валидации.
  • s точка соответствует переводу строки: по умолчанию . не соответствует переводу строки; с этим флагом . соответствует любому символу, включая переводы строк.
  • u режим Unicode: корректно обрабатывает четырёхбайтовые символы — эмодзи и редкие иероглифы. Если в тестовом тексте есть эмодзи, а результаты выглядят неверно, попробуйте включить этот флаг.

Несколько ловушек, в которые попадают

Жадные квантификаторы. .* по умолчанию жаден и захватывает максимум. Сопоставление <a><b> с <.*> вернёт всю строку, а не два тега. Замените на <.*?> (знак вопроса делает его ленивым) — и получите нужное поведение.

Якоря и многострочность. В обычном режиме ^\d+$ совпадает, только когда весь текст — одно число. Для построчной валидации нужно включить m.

Забыли экранирование. Писать regex внутри строки JavaScript означает удваивать обратные слэши — шаблон телефона превращается в "^1[3-9]\\d{9}$". Поле ввода здесь принимает литерал regex, поэтому одиночный обратный слэш, как в \d, — правильно.

Валидация формы требует якорей. Записав просто [0-9]{11}, вы найдёте «телефон» и внутри abc13800000000xyz. Для валидации нужно ограничить его с ^...$ от начала до конца.

Замечание о производительности

Некоторые шаблоны вызывают катастрофический откат. Например, (a+)+b на длинной последовательности aaaa... может работать экспоненциально дольше и подвесить браузер. Если страница перестала отвечать, виноваты обычно вложенные квантификаторы — перепишите шаблон точнее, например как a+b.

Частые вопросы

Можно ли использовать шаблоны из шпаргалки в продакшене?

Да, но корректируйте по необходимости. Правило для телефонного номера меняется вместе с политикой нумерации и требует обновления при выдаче новых префиксов. Полный шаблон номера удостоверения проверяет только формат и правдоподобность даты — он не проверяет последнюю контрольную цифру. А e-mail — практичное упрощение, покрывающее подавляющее большинство случаев; строго соответствующий RFC 5322 шаблон куда сложнее и обычно не стоит того.

Почему мой regex работает в другом языке, а здесь нет?

Этот инструмент использует движок регулярных выражений JavaScript, чей синтаксис отличается от PCRE (PHP, Python-модуль re). Три типичных отличия: в JavaScript нет части расширенного синтаксиса помимо (?<name>), нет условий и рекурсии, нет якорей \A / \z (используйте ^ и $). Именованные группы (?<name>...) поддерживаются.

Как искать содержимое, охватывающее переводы строк?

Двумя способами: замените . на [\s\S] или включите флаг s. Первый вариант переносимее и работает практически в любом движке.

Сохраняется ли тестовый текст?

Нет. Всё сопоставление идёт в памяти браузера и очищается при перезагрузке страницы. Ничего не отправляется.

Связанные инструменты