Тестер регулярных выражений

Напишите шаблон и увидите каждое совпадение в контексте — без кнопок, движок — встроенный JavaScript RegExp браузера.

Как пользоваться

  1. Введите шаблон без слэшей и включите нужные флаги: совпадения обновляются по мере ввода, нажимать нечего.
  2. Вставьте текст для проверки. Каждое совпадение подсвечивается в панели результата, а в списке указаны его позиция, текст и группы захвата.
  3. Скопируйте все найденные значения сразу или скачайте их текстовым файлом — по одному совпадению на строку.

Пример

Шаблон и текст

(\w+)@(\w+)\.(\w+)

Пишите ada@example.com или lin@example.org для деталей.

Совпадения

Совпадений: 2
#1 [7–22] ada@example.com
   1: ada  2: example  3: com
#2 [27–42] lin@example.org
   1: lin  2: example  3: org

Первая строка — шаблон (слэши не нужны), остальное — тестовый текст. Диапазоны — смещения в тексте с нуля, не включая конец, — те же числа, что JavaScript сообщает в match.index. Глобальный поиск включён всегда, поэтому находятся все вхождения, хотя переключателя g нет.

Правила, ограничения и известные проблемы

  • Движок — встроенный JavaScript RegExp браузера: без вариантов PCRE, Python, Go или RE2 и без выбора движка. \A, \z и встроенные флаги вроде (?i) не поддерживаются.
  • Глобальный поиск включён всегда; доступны только флаги i, m, s и u. y (липкий), d (индексы) и v (наборы Unicode) не предлагаются.
  • Слэши /…/ — только оформление: символ / внутри шаблона здесь экранировать не нужно, в отличие от литерала JavaScript. Надпись с флагами рядом — точная строка для повторного использования в коде.
  • При синтаксической ошибке после локализованного префикса показывается сообщение самого браузера (на английском); формулировки в разных браузерах отличаются.
  • Пустой тестовый текст не даёт результата — проверять нечего, поэтому шаблоны вроде ^$ здесь не проверить.
  • Собирается до 2000 совпадений (тогда счётчик показывает 2000+), а в списке отображаются первые 200. Оба ограничения объявляются, а не усекают результат молча.
  • Текст длиннее 100 000 символов всё равно обновляется по мере ввода, но с более длительной задержкой перед появлением результата.
  • Катастрофический backtracking может подвесить вкладку: регулярное выражение JavaScript выполняется синхронно и не прерывается, поэтому тайм-аута нет. Не вставляйте недоверенные шаблоны и огромные тексты.
  • \w, \b и \d работают только с ASCII даже с флагом u — для кириллических или арабских букв используйте \p{L} и флаг u. Без u конструкция \p{L} не ошибка: она молча превращается в поиск литерала.
  • i использует простое свёртывание регистра Unicode, а не правила языка: турецкие İ и i не совпадают, а ß не сворачивается в SS.
  • Диапазоны — смещения UTF-16 с нуля, не включая конец, поэтому эмодзи считается за два. Неучаствовавшая группа показывается как —; группа, совпавшая с пустой строкой, показывается пустой.
  • Совпадения нулевой длины (\b, a*, (?=x)) отмечаются тонким маркером, а их диапазон выглядит как n–n.
  • Копирование и скачивание содержат только найденные значения, по одному на строку, без номеров, диапазонов и групп. Поэтому совпадение с переводами строк занимает несколько строк.
  • Нет предпросмотра замены, генератора кода, постоянных ссылок и сохранённых шаблонов: шаблон не покидает поле ввода и не попадает в URL.

Когда шаблон уже работает, обычно переходят к этому.