Перейти к содержимому

Проверить регулярное выражение онлайн

Проверьте регулярное выражение JavaScript на своём тексте прямо в браузере: совпадения подсвечиваются на лету, группы захвата видны сразу, а объяснение простым языком покажет, как работает выражение.

Синтаксис регулярных выражений JavaScript (ECMAScript)Тот же движок, что в вашем браузере, Node.js и Deno
//g

$1 или $<name> вставляют группу, $& — всё совпадение, $` и $' — текст до и после него, $$ — знак доллара.

Здесь появятся совпадения и группы захвата.

Работает в браузере · без загрузки на серверКак это работает

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

  1. 1

    Введите шаблон

    Наберите регулярное выражение без слэшей; флаги включаются переключателями под ним.

  2. 2

    Добавьте тестовую строку

    Вставьте текст для поиска: совпадения подсвечиваются и выводятся списком вместе с группами захвата прямо по мере набора.

  3. 3

    Прочитайте объяснение

    Откройте «Объяснение», чтобы прочитать каждый токен простыми словами и понять, что шаблон делает на самом деле.

  4. 4

    Проверьте замену

    Введите замену с $1 или $<name>, посмотрите результат, а затем скопируйте код на вкладке «Код».

Лимиты и Pro

Бесплатно и без регистрации: до 100 000 подсчитанных совпадений, 2000 подсвеченных и 200 в таблице; подсветка работает для тестовых строк до 200 000 символов, а каждый запуск прерывается через 1,5 секунды.

Pro убирает рекламу; тестер работает одинаково на всех тарифах. Смотреть Pro

О инструменте «Проверка регулярных выражений»

Этот тестер запускает ваш шаблон на движке регулярных выражений JavaScript (ECMAScript), встроенном в браузер. Тот же движок работает в Node.js, Deno, Bun и на любой веб-странице, так что совпадения здесь будут такими же, как в вашем коде. Введите шаблон и тестовую строку, и каждое совпадение подсвечивается прямо во время набора. Рядом таблица с позициями, нумерованные и именованные группы захвата, а при включённом флаге d ещё и начало и конец каждой группы.

Доступны все восемь флагов: g для всех совпадений, i без учёта регистра, m чтобы ^ и $ работали для каждой строки, s чтобы точка совпадала и с переводами строк, u для полного Unicode и свойств \p{…}, v для наборов Unicode с пересечением и вычитанием внутри скобок, y для «липкого» поиска и d для индексов. Поле замены показывает результат String.prototype.replace с $1, $<name>, $& и другими подстановками, а на вкладке «Код» есть готовые фрагменты: литерал, matchAll и RegExp().

Вкладка «Объяснение» разбирает шаблон на токены и простыми словами говорит, что делает каждый из них: группы, проверки окружения, классы символов, квантификаторы, жадные они или ленивые. «Шпаргалка» вставляет популярные токены в место курсора.

Поиск выполняется в фоновом Web Worker с лимитом 1,5 секунды. Шаблон с катастрофическим откатом, например (a+)+b на длинной цепочке букв a, будет остановлен с пояснением, а вкладка не зависнет. Шаблоны для PCRE, Python или .NET, возможно, придётся изменить: в JavaScript нет притяжательных квантификаторов, атомарных групп, рекурсии, а также \A и \Z.

Конфиденциальность

Шаблоны и тестовые строки остаются в этой вкладке браузера: поиск идёт в локальном Web Worker, а всё, что вы вводите, не загружается на сервер, не записывается в журналы и не сохраняется. Поэтому можно спокойно проверять шаблоны на реальных строках логов или данных клиентов.

Возможности

Настоящий движок JS

Совпадения находятся точно так же, как в RegExp в браузерах и Node.js, включая наборы флага v и именованные группы.

Объяснение по токенам

Каждая группа, класс, якорь и квантификатор описаны простым языком.

Защита от отката

Поиск идёт в worker с лимитом 1,5 секунды, поэтому неудачный шаблон не заморозит страницу.

Проверка регулярных выражений: частые вопросы

Какой диалект регулярных выражений использует тестер?
Диалект JavaScript, описанный стандартом ECMAScript и реализованный в вашем браузере. Он поддерживает просмотр назад, именованные группы, свойства Unicode и флаг v, но не поддерживает возможности PCRE: притяжательные квантификаторы, атомарные группы, рекурсию и условные конструкции. Синтаксис Python (?P<name>…) здесь нужно записывать как (?<name>…). Результаты совпадают с Node.js и Deno на той же версии движка.
Почему шаблон находит только первое совпадение?
Без флага g JavaScript останавливается после первого совпадения: exec и match возвращают один результат, а replace меняет только первое вхождение. Включите g, чтобы находить и заменять все совпадения. Флаг y работает иначе: он ищет совпадение только в той позиции, где закончилось предыдущее, что удобно для токенизаторов.
Что такое катастрофический откат?
Если шаблон может совпасть с одним и тем же текстом множеством способов, как при вложенных квантификаторах вроде (a+)+ или (.*)*, неудачный поиск заставляет движок перебирать все комбинации, и время растёт экспоненциально с длиной текста. Здесь поиск прервётся через 1,5 секунды с предупреждением. Исправьте шаблон, сделав варианты взаимоисключающими, например [^,]* вместо .* перед запятой.
Как использовать группы захвата в замене?
Пишите $1, $2 и так далее для нумерованных групп или $<name> для именованной, например (?<year>\d{4}). $& вставляет всё совпадение целиком, $` текст перед ним, $' текст после него, а $$ даёт обычный знак доллара. Кнопка «Попробовать пример» загружает шаблон даты, который именно так переставляет год, месяц и день.
Когда нужен флаг u или v?
Флаг u нужен, когда в тексте есть эмодзи или другие символы вне базовой многоязычной плоскости: тогда точка и квантификаторы считают их одним символом, а ещё он открывает свойства Unicode вида \p{L}. Более новый флаг v включает всё, что умеет u, и добавляет операции над наборами внутри скобок, например [\p{L}--[a-z]] для букв не из ASCII. Вместе эти флаги использовать нельзя.