Тестер регулярных выражений
Инструмент проверяет регулярное выражение JavaScript на вашем тексте: подсвечивает совпадения, показывает группы захвата с позициями, выполняет замену и объясняет, из чего состоит шаблон. Ошибка в выражении показывается с указанием места. Пригодится, чтобы отладить проверку формы, разбор строки или поиск с заменой, прежде чем переносить выражение в код.
Как пользоваться
Введите шаблон между косыми чертами — без самих черт, как в записи /шаблон/флаги. Флаги включаются кнопками под полем. Текст для проверки — в поле «Текст»: совпадения подсвечиваются прямо в нём, соседние — разным цветом, а пустые совпадения отмечены вертикальной чертой.
В таблице — каждое совпадение с позицией (номер символа с нуля, как match.index) и значения групп. Включите «Замену», чтобы увидеть результат replace(): в строке замены работают $1, $<имя> и $&.
Выражение выполняется в вашем браузере тем же движком, что и в коде, и не отправляется на сервер. Если выполнение длится дольше трёх секунд, оно прерывается.
Для вашего удобства рекомендую использовать полноэкранный режим.
Текст
Вёрстка — 2026-10-17, ревью — 2026-10-20. Неверная дата: 26-10-17.
Совпадения
| № | Позиция | Совпадение | Группы |
|---|
Результат замены
Из чего состоит выражение
Для проверки выражений включите JavaScript. Пример: /\d{4}-\d{2}-\d{2}/g находит даты вида2026-10-17.
Флаги
g— найти все совпадения; без негоexec()иmatch()возвращают только первое.i— без учёта регистра,m—^и$совпадают с началом и концом каждой строки,s— точка совпадает и с переводом строки.u— режим Unicode:\p{L},\u{1F44B}и строгий синтаксис.v— его расширение с операциями над наборами вроде[\p{L}--[a-z]]; вместе сuне используется.y— поиск только с позицииlastIndex,d— позиции групп в свойствеindices.
Группы и замена
Круглые скобки создают группу захвата: её значение доступно как match[1] и в строке замены как $1. Именованная группа (?<year>\d{4}) доступна как match.groups.year и $<year>. Группа (?:…) только объединяет часть шаблона, не запоминая её.
const date = '2026-10-17'
date.replace(/(?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2})/, '$<d>.$<m>.$<y>') // "17.10.2026"Почему выражение может «зависнуть»
Вложенные квантификаторы вроде (a+)+$ на строке, которая почти подходит, перебирают огромное число вариантов разбиения — это называют катастрофическим возвратом. В браузере такое выражение блокирует страницу, на сервере — поток. Тестер прерывает выполнение через три секунды. Избегайте повторов внутри повторов и делайте альтернативы взаимоисключающими.
Вопросы и ответы
Почему находится только одно совпадение?
Без флага g поиск останавливается на первом совпадении. Включите g — так работают matchAll() и replaceAll().
Как вставить выражение в код?
Литералом: /шаблон/флаги. Если шаблон собирается из строки через new RegExp('…'), каждую обратную косую черту нужно удвоить: \d записывается как '\\d'.
Совпадёт ли результат с другими языками?
Не всегда: синтаксис регулярных выражений в PHP, Python и других языках отличается в деталях — например, именованными группами и поддержкой Unicode. Тестер проверяет именно JavaScript.
Изучить регулярные выражения
Подробнее — в статьях об объекте RegExp и методах строк match(), replace(), search() и split().