Tarayıcınız güncel değil

Bu siteyi görüntülemek için tarayıcınızın veya cihazınızın işletim sisteminin güncellenmesi gerekiyor.

Your browser is out of date. Please update iOS or your browser to view this site.

Перейти к основному содержимому
Gizke.com
Блог

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

Работает на устройстве. Ничего не отправляется.

Флаги

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

Тестовая строка

Совпадений не найдено

Объяснение

Введите шаблон выше, чтобы увидеть разбор того, что делает каждая часть

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

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

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

Какой вариант regex здесь используется?
Встроенный движок регулярных выражений JavaScript (тот, что стоит за RegExp и String.prototype.match/replace), поскольку всё здесь выполняется на стороне клиента в вашем браузере, а не на сервере. Он очень близок к PCRE, но имеет несколько отличий - например, поддержка lookbehind зависит от версии движка, а именованные группы используют синтаксис (?<имя>...).
Почему мой шаблон совпадает только один раз?
По умолчанию, без флага g (глобальный), regex останавливается после первого совпадения - это отражает реальное поведение RegExp.exec() и String.match() в JavaScript. Включите флаг g выше, чтобы находить все совпадения в тестовой строке, а не только первое.
В чём разница между (...) и (?:...)?
Оба группируют части шаблона, но только (...) - группа захвата - сохраняет найденное совпадение, чтобы вы могли ссылаться на него позже (как $1, $2, ... в замене или в списке групп совпадения). (?:...) - группа без захвата: она группирует и применяет квантификаторы, не сохраняя совпадение, что полезно, когда группировка нужна, а захваченный текст не важен.
Как работают именованные группы и замены $<имя>?
Напишите (?<имя>...) вместо (...), чтобы захватить группу под именем, а не просто номером. В режиме замены ссылайтесь на неё в тексте замены как $<имя> - например, (?<год>\d{4})-(?<месяц>\d{2}), заменённое на $<месяц>/$<год>, переставляет дату без необходимости запоминать номера групп.
В чём разница между жадным (greedy) и ленивым (lazy) квантификатором, например + и +??
Жадный квантификатор (+, *, {2,4}) захватывает как можно больше текста, а затем отступает, только если это нужно, чтобы совпала остальная часть шаблона. Ленивый квантификатор - тот же символ, за которым следует ? - наоборот, захватывает как можно меньше, расширяясь на один символ только при необходимости. Например, <.+> для <a><b> жадно совпадёт со всем <a><b>, а <.+?> лениво совпадёт только с <a>.
Что на самом деле проверяют опережающая и ретроспективная проверки (lookahead/lookbehind), если они не потребляют символы?
Они проверяют, встречается ли шаблон непосредственно перед или после текущей позиции, не включая его в само совпадение - так (?=...) и (?<=...) проверяют впереди/позади наличие чего-либо обязательного, а (?!...) и (?<!...) проверяют отсутствие этого. Поэтому можно использовать \d+(?=px), чтобы находить число только тогда, когда за ним следует «px», при этом само «px» никогда не появляется в найденном тексте.
Для разработчиков: откройте эту страницу с параметрами `q` (шаблон) и `text` (тестовый текст) в URL - например, gizke.com/regex?q=\d+&text=There are 42 apples - и оба значения будут подставлены автоматически. Большинству посетителей это не понадобится; предназначено для прямой ссылки на готовый пример.

Поделиться инструментом

БлогО проектеКонтактыУсловия использованияПолитика конфиденциальности