Проверка регулярного выражения
Тестируйте JavaScript RegExp, группы и замену локально — тяжёлое выражение автоматически останавливается.
Выражение не выполнено
- Совпадения
- 0
- Флаги
нет- Группы
- 0
- Символы
- 0
- Время
- —
- Режим поиска
- Все совпадения
Показаны первые совпадений. Уточните выражение или увеличьте лимит.
Подсветка совпадений
Контекст исходного текста с найденными фрагментами.
Добавьте исходный текст для проверки.
Найденные совпадения
Индекс отсчитывается с нуля, строка и столбец — с единицы.
Совпадений нет. Проверьте шаблон, флаги и исходный текст.
Предпросмотр замены
Результат применения строки замены с учётом флага g.
Выражение и текст обрабатываются только в браузере. Проверка останавливается примерно через 800 мс, а результат ограничен выбранным количеством совпадений.
Об инструменте
Проверяйте JavaScript RegExp полностью локально: все совпадения, точные позиции, capture groups, именованные группы, флаги, подсветку и результат замены. Вычисление выполняется в отдельном потоке и автоматически останавливается, если выражение работает слишком долго.
Как пользоваться
- Введите шаблон без окружающих слешей, например
(?<word>Terabita). - Выберите флаги или укажите их вручную.
- Добавьте исходный текст и при необходимости строку замены.
- Нажмите «Проверить» и изучите позиции, группы, подсветку и предпросмотр замены.
- Скопируйте выражение или отчёт либо скачайте таблицу совпадений в CSV.
Примеры
- Email: выделяет имя пользователя и домен в именованные группы.
- URL: находит адреса HTTP и HTTPS в обычном тексте.
- IPv4: показывает четыре числовые группы адреса; для строгой проверки диапазона октетов нужен более точный шаблон.
- Замена: используйте
$&для всего совпадения,$1для группы по номеру и$<name>для именованной группы.
Регулярные выражения JavaScript: синтаксис, флаги и безопасная проверка
Регулярное выражение описывает шаблон поиска в тексте. Regex Tester помогает проверить синтаксис JavaScript RegExp, увидеть каждое совпадение и понять, какие части строки попали в группы, до переноса выражения в код.
Шаблон вводится без разделителей
В поле указывается содержимое выражения без внешних слешей: вместо /hello/gi введите hello, а флаги g и i выберите отдельно. Так интерфейс не путает символ слеша внутри URL с границей литерала.
Символьные классы и квантификаторы
Классы \d, \w и \s обозначают цифру, символ слова и пробельный символ. Квантификаторы *, +, ? и {n,m} задают количество повторений. Квадратные скобки описывают набор допустимых символов.
Якоря и границы
^ и $ привязывают совпадение к началу и концу строки, а \b обозначает границу слова. С флагом m якоря работают для каждой строки многострочного текста.
Обычные, именованные и незахватывающие группы
Скобки (...) создают capture group, (?<name>...) — именованную группу, а (?:...) группирует выражение без сохранения результата. Обратные ссылки \1 и \k<name> позволяют повторно использовать найденное значение.
Опережающие и ретроспективные проверки
Lookahead (?=...) и (?!...) проверяет текст справа, lookbehind (?<=...) и (?<!…) — слева. Они не добавляют проверяемый фрагмент к самому совпадению и могут создавать совпадения нулевой длины.
Флаги JavaScript RegExp
g заменяет все совпадения, i отключает учёт регистра, m включает многострочные якоря, s разрешает точке совпадать с переводом строки, u включает Unicode-режим, v — Unicode sets, y запускает поиск строго с lastIndex, а d добавляет индексы групп в поддерживаемых браузерах. Флаги u и v нельзя использовать одновременно.
Замена найденных фрагментов
Строка замены поддерживает стандартный синтаксис JavaScript: $& вставляет совпадение целиком, $1 — первую группу, $<name> — именованную группу. Без флага g заменяется только первое совпадение, хотя отчёт всё равно показывает все найденные позиции.
Пустые совпадения
Якоря, границы и некоторые необязательные конструкции могут совпадать с позицией между символами. Тестер помечает такое значение как пустое и безопасно сдвигает поиск, чтобы цикл не завис.
Жадный и ленивый поиск
Квантификаторы по умолчанию жадные и выбирают максимально длинный подходящий фрагмент. Добавление ?, например .*?, делает их ленивыми. Лучше ограничивать допустимые символы точным классом, чем полагаться на широкое .*.
Unicode и регистр
Для текста с emoji и символами вне базовой многоязычной плоскости обычно нужен флаг u или современный v. Поведение \w и регистра в JavaScript может отличаться от ожиданий для некоторых языков, поэтому выражение следует проверять на реальных примерах.
Опасность катастрофического возврата
Вложенные неоднозначные повторения могут заставить движок перебирать огромное число вариантов и заблокировать интерфейс. Это называют catastrophic backtracking и используют в атаках ReDoS. Инструмент запускает RegExp в отдельном Web Worker и останавливает проверку примерно через 800 мс, но в рабочем коде всё равно нужны ограничение длины ввода, безопасная структура выражения и нагрузочные тесты.
Различия между движками
Здесь используется RegExp текущего браузера. Синтаксис и поведение могут отличаться от PCRE в PHP, Python re, .NET Regex, RE2 и других движков. Проверяйте выражение именно в той среде, где оно будет выполняться.
Приватность локальной проверки
Шаблон, текст, группы, замена и экспорт обрабатываются JavaScript-кодом в браузере и не отправляются на сервер Terabita.by. Для связанных задач используйте JSON Formatter, URL Encoder / Decoder и сравнение текста.
Частые вопросы
Какой синтаксис регулярных выражений используется?
Используется RegExp текущего браузера JavaScript. Он может отличаться от PCRE, Python, .NET и RE2.
Нужно ли вводить выражение между слешами?
Нет. Введите только шаблон, а флаги g, i, m, s, u, v, y и d укажите отдельно.
Что означают группы в результате?
Это значения capture groups в круглых скобках и именованных групп вида (?<name>...). Незахватывающая группа (?:...) в список не добавляется.
Почему без флага g показано несколько совпадений?
Отчёт специально сканирует весь текст, чтобы показать все позиции. Строка замены при этом соблюдает исходные флаги и без g изменяет только первое совпадение.
Что означает пустое совпадение?
Выражение совпало с позицией между символами, например из-за якоря или границы. Тестер безопасно продолжает поиск и не зацикливается.
Почему проверка была остановлена?
Вероятно, выражение вызвало слишком долгий перебор вариантов. Это признак риска ReDoS; упростите шаблон и ограничьте входные данные.
Отправляются ли шаблон и текст на сервер?
Нет. Проверка, подсветка, замена и экспорт выполняются локально в браузере в отдельном Web Worker.
Можно ли использовать результат в PHP или Python?
Не всегда напрямую. Синтаксис флагов, групп, Unicode и lookbehind различается между движками, поэтому выражение нужно повторно проверить в целевой среде.