Регулярное выражение написано, но непонятно, что оно находит на реальном тексте. Совпадения вроде есть, но какие именно группы сработали и на каких позициях? А если выражение «тяжёлое», тестер может повесить вкладку на минуту. Тестер регулярных выражений проверяет regex JavaScript на вашем тексте: совпадения подсвечиваются сразу при вводе, для каждого видны позиция, нумерованные и именованные группы. Можно проверить и замену со ссылками на группы ($1, $), а выражение выполняется в отдельном потоке браузера с ограничением времени — «тяжёлое» выражение не повесит страницу.
В этой статье разберём, какой синтаксис поддерживается, что значит «выражение выполняется слишком долго», как ссылаться на группы в замене и зачем включать флаг u.

Что умеет тестер
Тестер регулярных выражений принимает выражение, флаги и текст для проверки.
| Параметр | Что делает |
|---|---|
| Регулярное выражение | Выражение без косых черт по краям |
| Флаги | g, i, m, s, u, y |
| Текст для проверки | Текст, на котором проверяется выражение |
| Заменить | Строка замены со ссылками на группы |
| Проверять при вводе | Обновляет результат по мере ввода |
| Результат | Совпадения, позиции, группы, время выполнения |
Для каждого совпадения показываются позиция, сам текст совпадения и группы: нумерованные ($1, $2) и именованные ($).
Всё выполняется в браузере: текст никуда не отправляется.
Флаги: что включает каждый
Флаги меняют поведение выражения. Отметить можно несколько.
| Флаг | Что делает |
|---|---|
g |
Ищет все совпадения, а не только первое |
i |
Без учёта регистра |
m |
Многострочный режим: ^ и $ работают для каждой строки |
s |
Точка . соответствует и переводу строки |
u |
Юникод: символы целиком, классы \p{L}, строгий синтаксис |
y |
Поиск с указанной позиции (sticky) |
Для текста на русском флаг u лучше включать: с ним выражение работает с символами Юникода целиком, понимает \p{L} и другие классы Юникода и строже относится к ошибкам в синтаксисе.
Синтаксис: JavaScript, а не PCRE
Тестер использует синтаксис регулярных выражений JavaScript (ECMAScript) — тот же, что в браузерах и Node.js.
| Поддерживается | Не поддерживается |
|---|---|
Именованные группы (?…) |
Атомарные группы |
| Lookahead и lookbehind | Притяжательные квантификаторы |
Классы Юникода \p{L} с флагом u |
Модификатор x (расширенный режим) |
| Обратные ссылки | Некоторые конструкции PCRE |
Синтаксис почти совпадает с PCRE в PHP, но не полностью. Если выражение писалось для PHP, проверьте его в тестере — часть конструкций может не поддерживаться.
Катастрофический возврат: почему выражение «зависает»
Самая опасная проблема регулярных выражений. Выражение с вложенными квантификаторами вроде (a+)+ на неподходящем тексте перебирает экспоненциально растущее число вариантов. Это называется катастрофическим возвратом (catastrophic backtracking).
На практике: выражение работает мгновенно на коротком тексте и зависает на длинном, где почти совпадает, но не совпадает. На сайте такое выражение может остановить сервер.
Тестер защищает: выражение выполняется в отдельном потоке браузера с ограничением времени 2 секунды. Если лимит превышен, появляется сообщение «выражение выполняется слишком долго» — страница не зависает.
Что делать, если это произошло:
| Причина | Решение |
|---|---|
Вложенные квантификаторы (a+)+ |
Убрать вложенность |
| Неоднозначные альтернативы | Сделать части взаимоисключающими |
| Жадные квантификаторы на большом тексте | Использовать ленивые (*?, +?) или ограничить |
| Слишком общее выражение | Уточнить шаблон |
Замена со ссылками на группы
Инструмент позволяет проверить не только поиск, но и замену. В строке замены можно ссылаться на группы.
| Ссылка | Что означает |
|---|---|
$1, $2 … |
Нумерованные группы |
$ |
Именованная группа |
$& |
Всё совпадение |
$` |
Текст до совпадения |
$" |
Текст после совпадения |
$$ |
Знак доллара |
Это удобно, когда нужно переформатировать текст: например, поменять местами части совпадения или обернуть найденное в тег.
Именованные группы: зачем они нужны
Нумерованные группы ($1, $2) зависят от порядка скобок в выражении. Если добавить новую группу в середину, нумерация сдвинется, и ссылки в замене сломаются.
Именованные группы решают эту проблему: (?…) и (?…) дают стабильные имена, и ссылка $ не зависит от порядка.
| Тип группы | Пример | Ссылка в замене |
|---|---|---|
| Нумерованная | ([\w.+-]+) |
$1 |
| Именованная | (?[\w.+-]+) |
$ |
Для сложных выражений именованные группы читаемее и надёжнее.
Зачем тестировать регулярные выражения
| Задача | Что даёт тестер |
|---|---|
| Проверка шаблона | Увидеть, что именно находит выражение |
| Отладка групп | Понять, какая группа сработала |
| Проверка замены | Убедиться, что замена работает как задумано |
| Поиск катастрофического возврата | Увидеть, что выражение зависает, до публикации |
| Подбор флагов | Проверить поведение с g, i, u и другими |
| Обучение | Увидеть, как работают группы и квантификаторы |
Ограничения тестера
- Синтаксис JavaScript. Конструкции PCRE, не поддерживаемые в JS, не сработают.
- Ограничение времени 2 секунды. Очень тяжёлые выражения прерываются — это защита, а не ошибка.
- Только текст. Тестер не проверяет выражение на файлах или потоках.
- Не заменяет тесты в коде. Для продакшена нужны юнит-тесты, а не ручная проверка.
Как пользоваться: пошагово
- Введите выражение без косых черт и отметьте нужные флаги.
- Вставьте текст для проверки — совпадения подсветятся сразу.
- Чтобы проверить замену, отметьте «Заменить» и введите строку замены.
Типичные ошибки
Писать выражение с косыми чертами по краям. Поле принимает выражение без /…/. Косые черты нужно убрать.
Использовать вложенные квантификаторы без необходимости. (a+)+ — частая причина катастрофического возврата. Упростите выражение.
Забывать про флаг u для русского текста. Без него выражение может работать не с символами, а с кодовыми единицами.
Ссылаться на группы по номеру в сложном выражении. При изменении порядка скобок нумерация сдвинется. Используйте именованные группы.
Путать синтаксис JavaScript и PCRE. Выражение из PHP может не работать в JS. Проверяйте в тестере.
Игнорировать время выполнения. Если выражение выполняется долго на тесте, на реальных данных оно может зависнуть.
Вопросы и ответы
Какой синтаксис используется? Синтаксис регулярных выражений JavaScript (ECMAScript) — тот же, что в браузерах и Node.js. Он почти совпадает с PCRE в PHP, но, например, не поддерживает атомарные группы, притяжательные квантификаторы и модификатор x.
Что значит «выражение выполняется слишком долго»? Скорее всего, в выражении есть вложенные квантификаторы вроде (a+)+ — на неподходящем тексте число вариантов перебора растёт экспоненциально (катастрофический возврат). На сайте такое выражение может остановить сервер, поэтому здесь его выполнение прерывается через 2 секунды. Уберите вложенные квантификаторы или сделайте части выражения взаимоисключающими.
Как сослаться на группу в замене? $1, $2 … — нумерованные группы, $ — именованная группа, $& — всё совпадение, $` и $" — текст до и после совпадения, $$ — знак доллара.
Зачем флаг u? С флагом u выражение работает с символами Юникода целиком (эмодзи, редкие иероглифы), понимает \p{L} и другие классы Юникода и строже относится к ошибкам в синтаксисе. Для текста на русском языке его лучше включать.
Можно ли проверить замену? Да, отметьте «Заменить» и введите строку замены со ссылками на группы. Результат покажет, что получится.
Почему выражение работает в PHP, но не здесь? Тестер использует синтаксис JavaScript. Некоторые конструкции PCRE в JS не поддерживаются. Проверьте выражение и при необходимости адаптируйте.
Итог
Тестер регулярных выражений — инструмент для проверки regex JavaScript на тексте: подсветка совпадений при вводе, позиции, нумерованные и именованные группы, проверка замены со ссылками на группы. Выражение выполняется в отдельном потоке с ограничением времени, поэтому «тяжёлое» выражение не повесит страницу, а текст никуда не отправляется. Помните про катастрофический возврат, включайте флаг u для русского текста и используйте именованные группы — и регулярки будут работать предсказуемо.