Проверка регулярных выражений онлайн

Регулярные выражения онлайн: проверка и замена (JS)

Введите регулярное выражение и текст — все совпадения подсветятся, а каждая захватывающая группа появится в таблице. Режим Поиск и замена покажет результат подстановки. Проверка идёт на движке JavaScript вашего браузера, так что поведение такое же, как в вашем JS-коде, а введённый текст не покидает страницу.

Без косых черт: \d+, а не /\d+/.
g — все совпадения · i — без учёта регистра · m — многострочный · s — точка включает перенос · u — Юникод · v — наборы Юникода · y — липкий · d — индексы
Режим
Литерал регулярного выражения/(?<day>\d{2})\.(?<month>\d{2})\.(?<year>\d{4})/g
В коде JavaScriptnew RegExp("(?<day>\\d{2})\\.(?<month>\\d{2})\\.(?<year>\\d{4})", "g")
Флагивсе совпадения (g)
Захватывающих групп3
Именованные группыday, month, year

Расчёт выполняется на вашем устройстве · формулы проверены на известных значениях · Как мы проверяем

Как проверить регулярное выражение

  1. Введите регулярное выражение без косых черт вокруг: \d+, а не /\d+/.
  2. Укажите флаги в соседнем поле: g — найти все совпадения, gi — ещё и без учёта регистра, gu — для работы с Юникодом и \p{…}.
  3. Вставьте текст для проверки. Все совпадения подсвечиваются прямо в тексте, а таблица показывает каждое совпадение, его позицию и что захватила каждая группа.
  4. Проверьте замену: выберите Поиск и замена и напишите новый текст, используя $1 или $<name> для групп. Результат появится над совпадениями с кнопкой копирования.
  5. Перенесите шаблон в код: в результатах он показан как литерал и как new RegExp(…), где обратные косые черты уже удвоены для строки.

Если в шаблоне синтаксическая ошибка, вы увидите её описание простыми словами, способ исправить и исходное сообщение браузера.

Какой это диалект регулярных выражений

У регулярных выражений есть диалекты. Здесь шаблон выполняется движком JavaScript вашего браузера — V8 в Chrome, Edge и Яндекс Браузере, SpiderMonkey в Firefox, JavaScriptCore в Safari, — и все они следуют стандарту ECMAScript. Поэтому шаблон, который работает здесь, так же сработает в JavaScript, TypeScript и Node.js. Большая часть синтаксиса совпадает с PCRE (PHP), модулем re в Python, Java и .NET, но есть отличия:

ВозможностьJavaScript (этот тестер)PCRE и Python
Ретроспективная проверка (?<=…) (?<!…)Есть, любой длиныЕсть; в Python — только фиксированной длины
Именованные группы(?<name>…), \k<name>, $<name> в заменеВ Python (?P<name>…) и \g<name>
Сверхжадные a++ и атомарные группы (?>…)НетPCRE — да; Python — с версии 3.11
\d, \w, \bТолько ASCII даже с флагом u: кириллица в \w не входитPython 3: цифры и буквы Юникода, включая кириллицу; PHP — с модификатором u
Свойства Юникода \p{L}, \p{Script=Cyrillic}С флагом u или vPCRE — да; re в Python — нет
$ в концеТолько в самом конце (или в конце каждой строки с m)Ещё и перед последним переводом строки
Встроенные флаги (?i)Не для всего шаблона; новые браузеры понимают (?i:…) для частиЕсть

Без флага u или v JavaScript молча читает неизвестное экранирование как обычную букву: \A ищет «A», а \p{L} — текст «p{L}». Тестер предупреждает об обоих случаях.

Кириллица в регулярных выражениях

Русский текст — главный источник сюрпризов. Диапазон [а-я] берёт символы Юникода с U+0430 по U+044F, а буква ё стоит отдельно, на U+0451 (заглавная Ё — на U+0401, а не между Е и Ж). Поэтому [а-я] её пропускает, и слово «ёжик» разваливается. Вот что находят разные варианты в строке «Ёлка, ёжик и Елена» — результат посчитан этим же тестером:

ШаблонФлагиНаходит
[а-я]+gлка, жик, и, лена
[а-яё]+giЁлка, ёжик, и, Елена
[а-яА-ЯёЁ]+gЁлка, ёжик, и, Елена
\p{Script=Cyrillic}+guЁлка, ёжик, и, Елена
\w+gничего

Шпаргалка по регулярным выражениям

Символы и классы

СинтаксисЧто означает
.Любой символ, кроме переноса строки (с флагом s — вообще любой)
\d \DЦифра 0–9 / всё остальное
\w \WЛатинская буква, цифра или _ (A–Z, a–z, 0–9, _) / всё остальное
\s \SПробел, табуляция, перенос строки (и неразрывный пробел) / всё остальное
[абв]Один из символов а, б или в
[^абв]Любой символ, кроме а, б и в
[а-яё0-9]Диапазон: строчная русская буква или цифра
\p{L} \p{N}Любая буква / цифра любого алфавита (флаг u или v)
\. \* \\Точка, звёздочка, обратная косая черта буквально: экранируются . * + ? ^ $ ( ) [ ] { } | \ /

Якоря

СинтаксисЧто означает
^Начало текста (каждой строки с флагом m)
$Конец текста (каждой строки с флагом m)
\bГраница слова между \w и \W — только для латиницы
\BНе граница слова

Квантификаторы

СинтаксисЧто означает
*Ноль или больше раз
+Один или больше раз
?Ноль или один раз (необязательно)
{3}Ровно 3 раза
{2,5}От 2 до 5 раз
{2,}2 раза и больше
*? +? ??Ленивые: как можно меньше раз вместо как можно больше

Группы и проверки

СинтаксисЧто означает
(абв)Захватывающая группа; номера идут с 1 по открывающим скобкам
(?<name>абв)Именованная группа
(?:абв)Группа без захвата
\1 \k<name>Тот же текст, что нашла группа 1 / именованная группа
а|ба или б
(?=абв) (?!абв)Дальше идёт абв / не идёт абв (опережающая проверка)
(?<=абв) (?<!абв)Перед этим стоит абв / не стоит абв (ретроспективная проверка)

Замена

СинтаксисЧто означает
$1 $<name>Текст группы 1 / именованной группы
$&Всё совпадение
$` $'Текст до / после совпадения
$$Знак доллара

Готовые шаблоны для русских данных

Скопируйте шаблон в поле и подстройте под себя. Последний столбец — что шаблон находит в примере; это посчитано кодом самого тестера.

Что ищемШаблонФлагиВ примереЗамечания
Телефон РФ(?:\+7|8)[\s(-]*\d{3}[\s)-]*\d{3}[\s-]*\d{2}[\s-]*\d{2}gЗвоните: +7 (495) 123-45-67 или 8 912 345 67 89. → +7 (495) 123-45-67, 8 912 345 67 89Номер с +7 или 8 и любыми скобками, пробелами и дефисами. Перед сохранением приведите к одному виду, например заменой \D на пустую строку.
ИНН\b\d{10}(?:\d{2})?\bgИНН организации 7707083893, ИП 500100732259. → 7707083893, 50010073225910 цифр у организаций, 12 у физлиц и ИП. Контрольные цифры регулярным выражением не проверить — для этого нужен расчёт.
Почтовый индекс\b\d{6}\bg125009, Москва, ул. Тверская, д. 7 → 125009Ровно шесть цифр. Найдёт и любое другое шестизначное число, поэтому ищите рядом с адресом.
Госномер авто[АВЕКМНОРСТУХ]\d{3}[АВЕКМНОРСТУХ]{2}\d{2,3}gМашина А123ВС77, вторая — Х777ХХ199. → А123ВС77, Х777ХХ199В номерах используются только 12 букв, похожих на латинские. Если номер набран латиницей (A123BC77), он не найдётся — частая ловушка.
Дата ДД.ММ.ГГГГ\b(?:0[1-9]|[12]\d|3[01])\.(?:0[1-9]|1[0-2])\.\d{4}\bgДоговор от 01.09.2026, акт от 32.13.2026. → 01.09.2026Проверяет, что день 01–31 и месяц 01–12, но не календарь: 30.02.2026 пройдёт.
Email (в том числе .рф)[\p{L}\p{N}._%+-]+@[\p{L}\p{N}-]+(?:\.[\p{L}\p{N}-]+)+guПишите на info@пример.рф или ivan.petrov@mail.ru. → info@пример.рф, ivan.petrov@mail.ruВариант с \w не находит кириллические домены, поэтому здесь \p{L} и флаг u. Полной проверки по RFC 5322 нет ни у одного практичного шаблона.
Слово целиком (кириллица)(?<![\p{L}\p{N}_])кот(?![\p{L}\p{N}_])giuКот спит, котёнок играет, а кот Васька ест. → Кот, кот\b не видит русских букв, поэтому границу слова задают ретроспективная и опережающая проверки.
Повтор слова(?<![\p{L}])(\p{L}+)\s+\1(?![\p{L}])giuЭто было было давно, очень очень давно. → было было, очень очень\1 повторяет то, что нашла группа 1; с флагом i поймает и «Было было».

Пример: даты из ДД.ММ.ГГГГ в ISO

В поле уже стоит шаблон (?<day>\d{2})\.(?<month>\d{2})\.(?<year>\d{4}): он ищет даты в привычном русском формате «день.месяц.год». \d{2} — ровно две цифры, точка экранирована (\.), иначе она означала бы «любой символ», и каждая часть лежит в именованной группе. С флагом g он находит в тестовом тексте 3 даты: 16.10.2026 на позиции 22, 15.11.2026 на позиции 46, 30.09.2026 на позиции 77. Позиции считаются с нуля, так что позиция 22 значит, что перед совпадением 22 символа.

В режиме Поиск и замена замена $<year>-$<month>-$<day> переставляет части в формат ISO 8601, который понимают базы данных и сортировка по строке. Первая строка текста становится такой: «Счёт № 1042 выставлен 2026-10-16, оплатить до 2026-11-15.» Без флага g изменилась бы только первая дата.

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

Когда совпадение не находится, движок возвращается и пробует другие способы, которыми шаблон мог бы совпасть. Обычно их немного. Но повторение внутри повторения — (a+)+, (\w*)*, (а|аа)+ — делит один и тот же текст экспоненциальным числом способов. Проверка (a+)+$ на 30 буквах «a» с «!» в конце означает перебор примерно 230, то есть больше миллиарда вариантов, прежде чем движок сдастся; каждая лишняя «a» удваивает время.

Регулярное выражение в JavaScript нельзя прервать, поэтому во многих онлайн-тестерах такой шаблон вешает вкладку. Здесь он выполняется в отдельном фоновом потоке (Web Worker): через секунду тестер его останавливает, объясняет причину и показывает вложенное повторение, если находит его. Исправление — сделать так, чтобы каждый кусок текста совпадал только одним способом: a+$ вместо (a+)+$ или класс без разделителя, например [^;]* вместо .*. На сервере такой шаблон — риск отказа в обслуживании (ReDoS), так что его стоит исправить, а не просто обходить.

Советы и ограничения

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

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

Частые вопросы

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

JavaScript — по стандарту ECMAScript, встроенный в каждый браузер. Шаблоны ведут себя ровно так же, как в JavaScript, TypeScript и Node.js. Для PHP, Python или Java почти весь синтаксис тот же; отличия перечислены выше.

Почему [а-я] не находит букву ё?

В Юникоде строчные русские буквы от «а» до «я» идут подряд (U+0430–U+044F), а «ё» стоит отдельно — U+0451, заглавная «Ё» — U+0401. Диапазон её не включает. Пишите [а-яё] с флагом i или [а-яА-ЯёЁ], а для всей кириллицы — \p{Script=Cyrillic} с флагом u.

Почему \w и \b не работают с русским текстом?

В JavaScript \w — это только A–Z, a–z, 0–9 и _, даже с флагом u, а \b определяется через \w. Для русских слов используйте [а-яё] или \p{L}, а границу слова задавайте проверками: (?<![\p{L}\p{N}_])слово(?![\p{L}\p{N}_]) с флагом u.

Почему шаблон работает в Python или PHP, а здесь — нет?

Обычно из-за синтаксиса, которого нет в JavaScript: (?P<name>…), сверхжадные квантификаторы вроде a++, атомарные группы, (?i) в начале, \A и \Z. Сообщение об ошибке называет проблему, а для синтаксиса Python и PCRE показывает, как написать то же на JavaScript.

Чем жадный квантификатор отличается от ленивого?

Жадный, например .*, забирает как можно больше текста, поэтому <.*> на <b>привет</b> захватит всю строку. Знак ? делает его ленивым: <.*?> остановится на первой > и найдёт <b>.

Откуда пустые совпадения?

Шаблон, который может совпасть с пустой строкой, — \d*, x? — срабатывает и между символами. Тестер отмечает пустые совпадения тонкой красной чертой. Если нужен хотя бы один символ, пишите + вместо *.

Разместите этот калькулятор на своём сайте

Бесплатно для любого сайта или блога. Вставьте этот код туда, где должен появиться калькулятор:

Обновлено: 16 октября 2026 г.

Меню

Разделы

Финансовые калькуляторы15 калькуляторовКалькуляторы для бизнеса и покупок6 калькуляторовКалькуляторы здоровья7 калькуляторовМатематические и школьные калькуляторы9 калькуляторовКалькуляторы дат и времени5 калькуляторовСколько дней до праздника8 калькуляторовКалькуляторы и инструменты на каждый день14 калькуляторовИнструменты для PDF и фото13 калькуляторовПроверка микрофона и камеры, запись экрана6 калькуляторовИнструменты для разработчиков8 калькуляторов

CalcWorthy

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

Язык

Язык
РусскийRussianEnglishEnglishالعربيةArabicবাংলাBanglaDeutschGermanEspañolSpanishفارسیPersianFrançaisFrenchעבריתHebrewहिन्दीHindiBahasa IndonesiaIndonesianItalianoItalian日本語Japanese한국어KoreanBahasa MelayuMalayNederlandsDutchPolskiPolishPortuguêsPortugueseไทยThaiTürkçeTurkishУкраїнськаUkrainianاردوUrduTiếng ViệtVietnamese简体中文Simplified Chinese