Regex Tester

Тестер Regex

Создавайте и тестируйте регулярные выражения с подсветкой совпадений в реальном времени, группами захвата и режимом замены. Диалект JavaScript, работает полностью в вашем браузере.

JavaScript / ECMAScript regex (тот же движок, который ваш браузер использует для нативного RegExp). Это строгое надмножество POSIX и сильно пересекается с Python re, Java Pattern и PCRE по основным возможностям. Различия, на которые стоит обратить внимание: JavaScript поддерживает lookahead/lookbehind, именованные группы (через /(?...)/), а также флаги /u и /y. Он НЕ поддерживает посессивные квантификаторы (a++, a*+), атомарные группы ((?>...)) и branch-reset группы — это только PCRE.

Нет. Весь инструмент — это JavaScript внутри этой страницы. Компиляция шаблона, поиск и замена выполняются в вашем браузере через нативный конструктор RegExp. Откройте DevTools → Network и убедитесь — пока вы печатаете, никаких запросов не отправляется. Безопасно вставлять regex, совпадающие с production-логами, клиентскими e-mail или чем-то ещё, что вы не хотели бы отдавать серверному инструменту.

/ /
Совпадения
Объяснение
Шпаргалка по regex
. Любой символ (кроме перевода строки; с флагом /s — также перевод строки)
\d Любая цифра (0-9)
\D Любой не-цифровой символ
\w Символ слова (a-z, A-Z, 0-9, _)
\W Не-словесный символ
\s Пробельный символ (пробел, табуляция, перевод строки)
\S Непробельный символ
\b Граница слова
^ $ Начало / конец строки (или строки текста с флагом /m)
* Ноль или более повторений предыдущего элемента
+ Одно или более повторений предыдущего элемента
? Ноль или одно повторение предыдущего элемента (необязательный)
{n,m} От n до m повторений предыдущего элемента
(...) Capture group — сохраняется в $1, $2, …
(?:...) Группа без захвата — удобна для альтернативы без сохранения
(?<n>...) Именованная capture group — обращение через $<n>
[abc] Класс символов — любой из a, b или c
[^abc] Отрицание класса — любой символ, кроме a, b, c
a|b Альтернатива — совпадение с a или b
(?=...) Положительный lookahead — за которым следует
(?!...) Отрицательный lookahead — за которым НЕ следует
(?<=...) Положительный lookbehind — которому предшествует
(?<!...) Отрицательный lookbehind — которому НЕ предшествует
$1 $<n> Backreference в строке замены — по номеру или имени

Почему iKit Regex Tester

Создан для разработчиков, которым нужна чистая и быстрая песочница regex без рекламы, всплывающих окон и сторонних трекеров устаревших инструментов.

Подсветка совпадений в реальном времени

Введите шаблон и сразу увидите все совпадения, подсвеченные в тестовой строке. Capture group выводятся рядом с диапазоном индексов и содержимым.

Поиск и замена в одном инструменте

Переключитесь в режим Замена и предпросмотрите результат String.replace, с полной поддержкой нумерованных backreference $1/$2, именованных групп $ и $& для всего совпадения.

Все шесть флагов JavaScript

Переключайте global, без учёта регистра, multiline, dotall, unicode и sticky как чипы — те же флаги, что и у нативного RegExp, никаких сюрпризов при переносе шаблона в код.

Готовые частые шаблоны

Шаблоны в один клик для e-mail, URL, IPv4, телефона, даты, hex-цвета и UUID — каждый с примером тестовой строки, чтобы было видно, что именно совпадает.

Встроенная шпаргалка

Краткий справочник по классам символов, квантификаторам, якорям, группам и lookaround — сворачивается, чтобы быть под рукой, когда нужно, и не мешать, когда нет.

Приватность по умолчанию

Шаблон, тестовая строка и замена остаются в вашем браузере. Проверяемо в DevTools → Network: пока вы печатаете, ни один запрос не отправляется. Безопасно для production-логов и клиентских данных.

Как на самом деле работает сопоставление regex

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

  1. 1

    Компиляция шаблона

    Когда вы пишете /foo/ в JavaScript или вызываете new RegExp('foo'), движок разбирает ваш шаблон во внутренний автомат — конечный автомат, умеющий проходить по входному тексту. Компиляция выполняется один раз; сам поиск быстрый.

  2. 2

    Проход по входной строке

    Движок ведёт курсор по вашей тестовой строке. На каждой позиции он пытается пройти по путям автомата. Подходящий символ продвигает оба курсора; несоответствие приводит к откату на предыдущую точку выбора и переходу по другой ветке.

  3. 3

    Группы захвата

    Скобки в шаблоне открывают capture group: когда движок успешно сопоставляет содержимое внутри них, он запоминает совпавший фрагмент с индексами $1, $2 и т. д. Именованные группы (?<n>...) сохраняются под именем. Эти захваты доступны в поле groups объекта совпадения.

  4. 4

    Замена с backreference

    String.replace(regex, replacement) проходит по тем же совпадениям, но вместо их возврата вставляет строку замены. $1 в строке замены — это буквальное значение, захваченное группой 1, поэтому одним regex можно превратить 2024-01-15 в 15/01/2024.

Типичные задачи для regex

Реальные ситуации, когда пригодится тестер regex.

Валидация формата e-mail или URL

Соберите шаблон в тестере, вставьте примеры (как реальные, так и крайние случаи) и точно посмотрите, что совпадает, прежде чем закоммитить это в валидацию формы. Готовые шаблоны дают разумную отправную точку, покрывающую 95% реальных входных данных.

Очистка лог-данных

Есть лог-файл со смешанными таймстампами, ANSI-кодами цветов и IP-адресами, которые нужно скрыть? Используйте режим Замена с шаблоном вроде \b(?:\d{1,3}\.){3}\d{1,3}\b и заменой [REDACTED] — посмотрите результат до того, как прогонять sed по реальному файлу.

Рефакторинг кода через regex find-and-replace

Find-and-replace в IDE поддерживает regex, но не показывает живой предпросмотр сразу для нескольких тестовых случаев. Сначала соберите шаблон здесь на примерах строк из вашего кода, проверьте захваты и замену, а затем вставьте рабочий regex в VS Code / IntelliJ.

Извлечение структурированных данных

Нужно вытащить все e-mail из дампа контактов или все суммы в долларах из чека? Соберите подходящий regex в iKit, скопируйте его в однострочный скрипт (text.matchAll(re)) — и разовая задача парсинга превращается в десять строк кода.

Почему важно тестировать regex локально

Шаблоны regex часто кодируют чувствительную информацию: структуру клиентских ID, внутренние API-эндпоинты, правила паролей или поля PII, которые вы пытаетесь скрыть. Вставка их в серверный инструмент — вместе с реальными тестовыми данными — приводит к утечке и шаблона, и входных данных. Тестер regex от iKit — это JavaScript, уже загруженный во вкладке вашего браузера.

  • Ноль сетевых запросов во время поиска или замены — проверяется в DevTools.
  • Шаблоны и тестовые строки остаются в памяти браузера; очищаются по кнопке Очистить или при обновлении страницы.
  • Безопасно для production-шаблонов скрытия логов, валидации клиентских данных и regex, чувствительных к безопасности.

Похожие руководства

Подробные туториалы и сравнения инструментов из блога iKit.

Часто задаваемые вопросы

Какой диалект regex поддерживается?

JavaScript / ECMAScript regex (тот же движок, который ваш браузер использует для нативного RegExp). Это строгое надмножество POSIX и сильно пересекается с Python re, Java Pattern и PCRE по основным возможностям. Различия, на которые стоит обратить внимание: JavaScript поддерживает lookahead/lookbehind, именованные группы (через /(?...)/), а также флаги /u и /y. Он НЕ поддерживает посессивные квантификаторы (a++, a*+), атомарные группы ((?>...)) и branch-reset группы — это только PCRE.

Загружаются ли мои шаблоны или тестовые строки куда-либо?

Нет. Весь инструмент — это JavaScript внутри этой страницы. Компиляция шаблона, поиск и замена выполняются в вашем браузере через нативный конструктор RegExp. Откройте DevTools → Network и убедитесь — пока вы печатаете, никаких запросов не отправляется. Безопасно вставлять regex, совпадающие с production-логами, клиентскими e-mail или чем-то ещё, что вы не хотели бы отдавать серверному инструменту.

Чем отличаются $1 и $<name> в замене?

Оба являются backreference в строке замены. $1, $2, … ссылаются на нумерованные capture group в порядке их появления в шаблоне — (foo)(bar) даёт $1 = 'foo', $2 = 'bar'. $ ссылается на именованную capture group, объявленную как (?...) — это читабельнее и не ломается при перестановке групп в шаблоне. В JavaScript также есть $& (всё совпадение), $` (текст до совпадения) и $' (текст после совпадения).

Почему не работает мой lookbehind?

Lookbehind (?<=...) и (?

Как сопоставить emoji, символы с диакритикой или нелатинские письменности?

Включите flag /u (unicode), затем используйте Unicode property escapes внутри pattern. `\p{L}` соответствует любой букве — включая ñ, é, 中, ก, ا. `\p{N}` соответствует любой цифре, включая нелатинские цифры вроде ٠-٩. `\p{Emoji}` соответствует code points эмодзи. Без /u тот же pattern тихо не срабатывает на emoji с surrogate pair (всё, что за пределами BMP) и обрабатывает символы с диакритикой как отдельные base + combining marks. Flag /u указывает движку интерпретировать ваш ввод как Unicode code points, а не как сырые UTF-16 code units — так что большинство межъязыковых regex-багов исчезают одним переключателем.