Проверка регулярных выражений
Проверяйте регулярные выражения онлайн для JavaScript, PHP и Python: подсветка совпадений и групп захвата сразу по мере ввода.
Вставьте текст — совпадения подсветятся здесь
Готовые шаблоны — кликните, чтобы подставить
Что такое регулярные выражения
Регулярное выражение (regex, regexp) — это шаблон, который описывает набор строк по правилам, а не перечисляет их буквально. Шаблон ^\d{3}-\d{4}$ находит любую строку вида «123-4567», не зная заранее конкретных цифр. Regex одинаково используют для поиска, проверки формата (email, телефон, URL) и замены текста. Все три задачи умеет тестер выше.
Как пользоваться тестером
- Введите шаблон в поле «Регулярное выражение», без слэшей по краям.
- Вставьте текст для проверки, совпадения подсветятся сразу по мере ввода.
- Включайте флаги под полем шаблона, чтобы поменять поведение поиска.
- Кнопка «Копировать код» отдаёт готовый вызов на JavaScript, PHP или Python, язык выбирается наверху страницы.
Шпаргалка по синтаксису
Основные конструкции, из которых собирается любой шаблон.
| Синтаксис | Что означает |
|---|---|
\d \D | Цифра [0-9] и всё, кроме цифры |
\w \W | Буква/цифра/подчёркивание и всё остальное |
\s \S | Пробельный символ и всё, кроме него |
. | Любой символ, кроме переноса строки |
^ $ | Начало и конец строки |
\b \B | Граница слова и её отсутствие |
[abc] [^abc] | Один символ из набора и один символ не из набора |
(...) | Группа захвата |
(?:...) | Группа без захвата |
(?<name>...) | Именованная группа захвата |
a|b | Альтернатива, то есть a или b |
Квантификаторы: сколько раз повторить
Квантификатор ставится сразу после символа или группы и задаёт, сколько раз он может повториться.
| Квантификатор | Что означает |
|---|---|
* | 0 или более повторений |
+ | 1 или более повторений |
? | 0 или 1 повторение |
{n} | Ровно n повторений |
{n,} | n или более повторений |
{n,m} | От n до m повторений |
Жадные и ленивые квантификаторы
По умолчанию квантификаторы «жадные», они захватывают максимально длинный кусок текста. Добавленный после них знак вопроса делает их «ленивыми», и тогда они останавливаются на первом же подходящем совпадении.
const text = '<b>жирный</b> и <b>ещё раз</b>'
text.match(/<b>.*<\/b>/) // жадный: захватит от первого <b> до последнего </b>
text.match(/<b>.*?<\/b>/) // ленивый: остановится на первом же </b>Ленивые квантификаторы почти всегда нужны при разборе HTML-подобной разметки или любого текста с повторяющимися парными разделителями.
Группы захвата и именованные группы
Круглые скобки (...) группируют часть шаблона и заодно запоминают найденный фрагмент. Его можно достать из результата или подставить при замене как $1, $2 и так далее. Если запоминать фрагмент не нужно, скажем группа стоит только ради альтернативы a|b внутри более крупного шаблона, берите группу без захвата (?:...). Она не засоряет список совпадений.
const match = '2024-06-15'.match(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/)
match.groups.year // '2024'
match.groups.month // '06'
match.groups.day // '15'Именованная группа (?<name>...) решает ту же задачу, но обращаться к результату можно по имени, а не по номеру. Когда групп больше двух-трёх, код так читается заметно проще.
Просмотр вперёд и назад (lookahead / lookbehind)
Иногда нужно проверить, что рядом с совпадением есть (или нет) определённый текст, не включая его в само совпадение. Для этого есть четыре конструкции просмотра:
(?=...) // впереди должно быть — «100(?=руб)» найдёт 100 перед «руб»
(?!...) // впереди не должно быть
(?<=...) // позади должно быть — «(?<=\$)\d+» найдёт число после знака $
(?<!...) // позади не должно бытьКлассический пример — найти цену без символа валюты. (?<=\$)\d+(\.\d{2})? находит «49.99» в строке «$49.99», не захватывая сам знак доллара.
Флаги регулярных выражений
Флаги меняют поведение всего шаблона целиком и указываются после закрывающего слэша (в JavaScript) или отдельным аргументом (в PHP и Python). В тестере выше их включают переключателями.
| Флаг | Что делает |
|---|---|
g | Найти все совпадения, а не только первое |
i | Не учитывать регистр букв |
m | ^ и $ работают на границах каждой строки, а не только всего текста |
s | Точка . дополнительно совпадает с переносом строки |
u | Корректная работа с Unicode: многобайтовыми символами и эмодзи |
Regex в JavaScript, PHP и Python: чем отличаются
Ядро синтаксиса (классы символов, квантификаторы, группы) одинаково во всех трёх языках. Отличается обвязка. JavaScript пишет шаблон между слэшами (/regex/флаги), PHP оборачивает его в дополнительный разделитель-кавычку ('/regex/флаги'), а Python передаёт шаблон обычной строкой, а флаги отдельным аргументом функции. Именованные группы Python исторически писал как (?P<name>...), но синтаксис (?<name>...) из тестера тоже валиден. Переключатель языка наверху страницы меняет именно эту обвязку в кнопке «Копировать код», сам паттерн остаётся общим.
Короткая версия этой шпаргалки с живым тестером есть в статье «Регулярные выражения: как читать и составлять».
Проверить регулярное выражение прямо в рабочем коде поможет проверка синтаксиса JavaScript.
Похожие инструменты
Другие полезные инструменты из той же категории
Часто задаваемые вопросы
Тестер поддерживает JavaScript (ECMAScript), PHP (PCRE), Python (модуль re) и .NET regex, каждый со своим специфическим синтаксисом и функциями.
Общие флаги включают: g (глобальное совпадение всех), i (без учёта регистра), m (многострочный), s (dotall), u (unicode) и x (расширенный/подробный). Каждый тип может поддерживать разные флаги.
Инструмент включает распространённые предустановленные паттерны для email, URL, номеров телефонов и дат. Также можно создавать пользовательские паттерны с помощью интерактивного конструктора regex.
Да! Тестер выделяет все совпадения в вашем тестовом тексте и показывает группы захвата, упрощая визуализацию того, что ваш regex находит.
Жадные квантификаторы (*, +, ?) сопоставляют как можно больше, а нежадные (??, *?, +?) сопоставляют как можно меньше. Используйте нежадные для точного сопоставления между разделителями.