Как работает regex в вашем браузере?
Каждая среда выполнения JavaScript содержит встроенный движок регулярных выражений — new RegExp(pattern, flags) компилирует ваш шаблон, а такие методы, как String.prototype.match, String.prototype.replace и RegExp.prototype.exec, запускают его на любой входной строке. Этот тестер оборачивает данный движок в интерфейс, чтобы вы могли редактировать, запускать и инспектировать шаблоны, не покидая браузер. Ничто из того, что вы вводите — шаблон, флаги, тестовая строка или замена — не отправляется по сети.
Как работает тестер regex?
Конвейер состоит из нескольких коротких шагов, и все они выполняются на стороне клиента при каждом нажатии клавиши (с debounce 150 мс, чтобы ввод оставался плавным):
- Тело вашего шаблона считывается из поля выше (без ведущих или завершающих разделителей
/— они декоративные). Выбранные кнопки флагов объединяются в строку флагов, напримерgiилиgimsuy. new RegExp(patternBody, flags)компилирует шаблон. Если движок выбрасываетSyntaxError(например, непарная скобка или некорректное экранирование), сообщение отображается над тестовой строкой, а список совпадений очищается. Ошибка компиляции — это реальныйerr.messageиз V8 / SpiderMonkey / JavaScriptCore, поэтому он совпадает с тем, что вы увидите в DevTools.- Для списка совпадений тестер всегда перебирает с синтетическим глобальным флагом — поэтому даже если вы выключите
g, список по-прежнему показывает каждое совпадение. Стандартная защита от совпадений нулевой ширины (if (m.index === rx.lastIndex) rx.lastIndex++) не даёт циклу зациклиться на шаблонах, которые совпадают с пустой строкой. Режим замены учитывает ваш реальный набор флагов, поэтому$&ведёт себя так же, какString.prototype.replace. - Между каждой итерацией тестер проверяет
performance.now() - startи прерывается, когда прошло 50 мс. Это защищает от катастрофического возврата на входах вроде(a+)+$против длинного рядаa— иначе вкладка зависнет. Защита работает по принципу best-effort: патологический шаблон с одиночным совпадением всё равно может занимать время внутри одного вызоваexec. Если это произойдёт, обновите вкладку и перепишите шаблон с нежадным квантификатором или с атомарным посессивным стилем (например,[^x]*x). - Тестовая строка разбивается на сегменты по диапазону каждого совпадения, и совпадающие сегменты оборачиваются в элементы
<mark class="rx-match rx-cap-N">, гдеNциклически проходит шесть цветов палитры, чтобы соседние совпадения было легко различить с первого взгляда. Нумерованные группы (m[1],m[2], …) и именованные группы (m.groups) каждого совпадения отображаются как помеченные строки ниже; если установлен флагd, также показываются индексы[start, end]для каждой группы.
Зачем использовать этот тестер regex?
- Конфиденциальность: каждый шаблон, тестовая строка и замена выполняются в вашем браузере с использованием встроенного движка JavaScript RegExp. Ничего не покидает вкладку — это важно, когда вводом является клиентский лог, утечённый шаблон учётных данных или что-либо ещё, что вы не вставили бы в размещённую SaaS-песочницу regex.
- Честный диалект: тестер показывает именно тот regex-движок, который используют Node.js, Chrome, Safari, Firefox и любой валидатор форм в браузере. Нет слоя перевода в диалект Perl, скрывающего тонкие различия — то, что работает здесь, работает в вашем коде.
- Отладка захвата и именованных групп: каждая нумерованная группа (
$1,$2, …) и именованная группа ($<year>) отображается для каждого совпадения, так что вы можете построить парсер и читать слоты, не гадая. Режим замены позволяет свободно смешивать группы —$2-$1меняет местами первые два слота,$<name>вставляет именованный слот, а$&возвращает всё совпадение. - Защита от катастрофического возврата: лимит 50 мс на перебор прерывает патологические шаблоны вроде
(a+)+$до того, как они заморозят вкладку. Вы видите пояснительную ошибку вместо зависшего браузера, а страница немедленно восстанавливается.
Каковы типичные применения тестера regex?
Регулярные выражения встречаются в веб-разработке, безопасности и работе с данными — этот тестер нацелен на наиболее распространённые сценарии:
- Валидация форм: создайте прототип шаблона email, телефона или почтового индекса, вставьте примеры в тестовую строку и убедитесь, что каждый положительный случай совпадает, а каждый отрицательный — нет, прежде чем отправлять шаблон в продакшен-код.
- Парсинг логов: вставьте фрагмент вывода NGINX, приложения или аудит-лога, напишите шаблон с именованными группами для интересующих частей (
(?<ip>…) (?<path>…)) и читайте захваченные слоты по каждому совпадению, чтобы подтвердить корректность парсера. - Поиск и замена для рефакторинга: используйте режим замены, чтобы переписать идентификаторы во фрагменте —
(\w+)\.set(\w+)\(→$1.$2 =превращает вызовы сеттеров в присваивания свойств, а живой превью показывает результат до того, как вы зафиксируете его в codemod.
Как выглядит пример regex?
Возьмите шаблон (\d{4})-(\d{2})-(\d{2}) с флагом g, запущенный по тестовой строке release 2025-11-15, prerelease 2026-05-25. Движок находит два совпадения. Первое — 2025-11-15 с группой 1 = 2025, группой 2 = 11, группой 3 = 15. Второе — 2026-05-25 с такой же формой групп. В режиме замены шаблон замены $3/$2/$1 переписывает обе даты как 15/11/2025 и 25/05/2026 — конвертация ISO в DMY одним шаблоном, которую вы можете визуально проверить перед тем, как подключить шаблон к скрипту.
Используйте этот тестер как быстрый путь для любой работы с regex — построения, отладки или переписывания шаблонов. Всё выполняется локально; ничего не журналируется; regex-движок — это тот, что поставляется с вашим браузером, поэтому поведение совпадает с тем, что увидит продакшен-код во время выполнения.