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

RSS

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

Работает на 100% в вашем браузере. Ничего из вставленного не загружается на сервер и не сохраняется.
//

Совпадения

Подробности совпадений

#СовпадениеИндексГруппы

Замена

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

  1. Введите шаблон без окружающих косых черт, например \d{3}-\d{4}.
  2. Включите нужные флаги (g, i, m, s, u, y).
  3. Вставьте тестовый текст. Совпадения подсвечиваются на лету, а каждая группа захвата перечисляется в списке.
  4. При желании введите строку замены, используя $1 или $<name> для групп, чтобы просмотреть результат.

Тестер использует встроенный движок регулярных выражений JavaScript вашего браузера. Ваши шаблоны и тестовые данные остаются на вашем устройстве и не загружаются и не сохраняются.

Синтаксис регулярных выражений JavaScript вкратце

Диалекты регулярных выражений различаются между языками. Этот инструмент использует диалект JavaScript (ECMAScript), поэтому результаты совпадают с тем, что делают RegExp, String.prototype.match и replace в браузерах и Node.js. Большая часть синтаксиса переносится в Python, PCRE и Java, но детали, такие как синтаксис именованных групп и поддержка lookbehind, различаются.

Флаги

ФлагНазваниеДействие
gglobalНаходит все совпадения, а не останавливается после первого.
iignoreCaseПоиск без учёта регистра.
mmultiline^ и $ совпадают в начале и конце каждой строки.
sdotAll. совпадает также с переносами строк.
uunicodeОбрабатывает шаблон как кодовые точки Unicode; включает экранирования свойств \p{...}.
ystickyСовпадает только в позиции, заданной lastIndex.

Строительные блоки

  • Классы символов: [abc], диапазоны [a-z], отрицание [^0-9], сокращения \d (цифра), \w (символ слова), \s (пробельный символ) и их отрицания \D, \W, \S. Без флага u \w и \d охватывают только ASCII.
  • Квантификаторы: * (0 или более), + (1 или более), ? (0 или 1), {n}, {n,}, {n,m}. Добавьте ?, чтобы сделать их ленивыми: .*?.
  • Группы: (...) захватывает, (?:...) группирует без захвата, (?<year>\d{4}) создаёт именованную группу, а \1 или \k<year> ссылается на неё.
  • Якоря: ^, $ и граница слова \b.
  • Lookaround: (?=...) положительный lookahead, (?!...) отрицательный lookahead, (?<=...) положительный lookbehind, (?<!...) отрицательный lookbehind. Они проверяют контекст, не поглощая символы.
// Суммы после знака доллара, без самого знака
/(?<=\$)\d+(?:\.\d{2})?/g     "Total: $42.50"  →  "42.50"

// Переформатирование дат с помощью именованных групп
"2024-03-15".replace(/(?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2})/, "$<d>.$<m>.$<y>")
// "15.03.2024"

Распространённые шаблоны

НазначениеШаблонОграничения
Email (простой)^[^\s@]+@[^\s@]+\.[^\s@]+$Только базовая проверка. Полный синтаксис адреса гораздо сложнее; подтверждайте отправкой письма.
Адрес IPv4^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$Отвергает октеты больше 255 и ведущие нули. Не работает с IPv6.
Дата (YYYY-MM-DD)^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$Принимает невозможные даты, например 2023-02-31. Проверяйте с помощью библиотеки дат.
URL (http/https)^https?:\/\/[^\s/$.?#][^\s]*$Нестрогая проверка. Для настоящего разбора используйте конструктор URL.

Для IP-адресов в частности конвертер IP-адресов разбирает и конвертирует как IPv4, так и IPv6.

Ловушки

Катастрофический откат

Вложенные или пересекающиеся квантификаторы могут заставить движок с откатами, такой как в JavaScript, перебирать экспоненциальное число путей, когда совпадение не находится. Несколько десятков символов могут заморозить вкладку браузера или, на сервере, сделать возможной атаку типа «отказ в обслуживании» (ReDoS):

/^(a+)+$/.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!")   // может зависнуть

/^a+$/.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!")       // мгновенно

Избегайте шаблонов вроде (a+)+, (a|a)* или (.*)*, делайте альтернативы взаимоисключающими и будьте конкретны: внутри кавычек [^"]* безопаснее, чем .*.

Другие подводные камни

  • Регулярное выражение с флагом g запоминает lastIndex, поэтому повторные вызовы test() для одного и того же объекта чередуют true и false.
  • При построении шаблона из строки обратные косые черты нужно удваивать: new RegExp("\\d+").
  • Если забыть ^ и $, валидатор будет принимать любой ввод, который лишь содержит совпадение.
Совет: Не разбирайте структурированные форматы, такие как HTML, JSON или YAML, регулярными выражениями. Используйте парсер, а для просмотра — наши инструменты «Форматирование и валидация JSON» и «Форматирование HTML».

Часто задаваемые вопросы

Почему моё регулярное выражение работает здесь, но не в Python или PHP?

Диалекты различаются. Python записывает именованные группы как (?P<name>...) и поддерживает только lookbehind фиксированной ширины; PCRE в PHP заключает шаблоны в разделители. Правила экранирования в строковых литералах тоже различаются между языками.

В чём разница между жадными и ленивыми квантификаторами?

Жадные квантификаторы (.*) захватывают как можно больше, а затем отступают; ленивые (.*?) захватывают как можно меньше. Для <b>x</b> выражение <.*> совпадает со всей строкой, а <.*?> — только с <b>.

Поддерживает ли JavaScript lookbehind?

Да, начиная с ES2018, и, в отличие от многих движков, допускает lookbehind переменной длины. Его поддерживают все современные основные браузеры.

Как найти буквальную точку или скобку?

Экранируйте её обратной косой чертой: \., \[, \(. Внутри класса символов большинство символов буквальные, поэтому [.] тоже совпадает с точкой.

Обновлено

Комментарии

Оценок пока нет

Войдите, чтобы оценить этот инструмент.

Поделитесь советом, задайте вопрос или расскажите, как вам помог инструмент.

Комментариев пока нет. Расскажите первым, как всё прошло.

Скопировано в буфер обмена