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

Проверяйте шаблоны на реальном тексте прямо в браузере.

Совпадения

  
#ТипЗначениеПозиция

Работает в браузере. То, что вы вводите, никуда не отправляется.

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

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

Краткий справочник по синтаксису regex

ШаблонСоответствует
\dЛюбой цифре, от 0 до 9
\wЛюбой букве, цифре или символу _
\sЛюбому пробельному символу
+Одному или более предыдущих токенов
*Нулю или более предыдущих токенов
?Нулю или одному, либо делает квантификатор ленивым
^ и $Началу и концу строки или её линии

Возможности regex в JavaScript

ВозможностьСинтаксисПримечание
Именованные группы(?<name>...)Поддерживаются с ES2018
Lookbehind(?<=...) и (?<!...)Поддерживаются с ES2018
Режим Unicodeфлаг uНужен для escape-последовательностей свойств Unicode вроде \p{Letter}
Без учёта регистрафлаг iТа же идея, что и в большинстве других языков

Советы по написанию шаблонов

  • Экранируйте специальные символы вроде . ( ) [ ] обратной чертой, когда имеете в виду сам этот символ.
  • Используйте группу без захвата (?:...) для группировки, когда позже не нужно ссылаться на это совпадение.
  • Жадные квантификаторы забирают как можно больше. Добавьте ? после квантификатора, например +?, для ленивого сопоставления, которое останавливается на первой возможной точке.
  • Проверяйте на граничных случаях, например на пустой строке или лишних пробелах, а не только на тексте, который ожидаете сопоставить.

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

Почему мой шаблон перестал отвечать?

Некоторые шаблоны могут откатываться экспоненциально долго на определённом тексте. Сопоставление выполняется в фоновом воркере с лимитом в 1.5 секунды, поэтому шаблон, уходящий в бесконечный перебор, останавливается, а не замораживает вкладку.

Что означают флаги?

g находит каждое совпадение, а не только первое, i игнорирует регистр, m заставляет ^ и $ работать построчно, s позволяет точке соответствовать переносам строк, u включает полный режим Unicode, y привязывает поиск к последней позиции, а d добавляет начальную и конечную позицию для каждого совпадения.

Поле замены меняет мой тестовый текст?

Нет. Оно показывает, что выдал бы String.replace, в отдельном поле результата, поэтому введённая тестовая строка остаётся точно такой, какой была.

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

Да. Напишите группу как (?<name>...), и её имя появится рядом с номером группы в таблице совпадений.

Мой текст куда-то отправляется?

Нет. Сопоставление выполняется в воркере внутри вашей собственной вкладки браузера, и ничего из введённого не покидает страницу.

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

Родной движок RegExp вашего браузера на JavaScript, тот же самый, что выполняет ваши шаблоны, если вы создаёте веб-приложение или скрипт на Node.js.

Что такое катастрофический backtracking?

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

Могут ли ^ и $ соответствовать началу и концу каждой строки, а не только всей строки целиком?

Да, включите флаг m (многострочный). Без него ^ и $ соответствуют только самому началу и концу всей тестовой строки.

Похожие инструменты