Инструменты
Руководства

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

Разработка

Проверяйте регулярные выражения JavaScript с подсветкой совпадений и группами захвата.

100 % на клиенте Без бэкенда
Вывод
    На этой странице

    Что такое тестер регулярных выражений?#

    Регулярное выражение — это компактная нотация для описания шаблонов в тексте: «всё, что похоже на email», «третье слово каждой строки», «все числа не внутри кавычек». Написать шаблон — лишь половина дела; вторая половина — увидеть, что он реально сопоставляет, на тексте, похожем на ваш, до того как вы вставите его в продакшен-код. Тестер регулярных выражений — это страница, где этим занимаются.

    Этот инструмент применяет ваш шаблон к образцу текста в реальном времени, подсвечивает каждое совпадение прямо по месту и перечисляет каждую группу захвата отдельно, чтобы вы могли убедиться не только в том, что совпадение произошло, но и в том, что именно было захвачено. Используется движок регулярных выражений JavaScript (тот же, что уже понимают ваш браузер и Node), поэтому поведение здесь совпадает с тем, что сделает ваш код.

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

    1. Введите Шаблон между двумя маркерами / в левом верхнем углу. Слеши вводить не нужно — они нарисованы за вас, как при записи литерала регулярного выражения в коде.
    2. Введите Флаги в маленьком поле справа от шаблона. Те, что понадобятся чаще всего:
      • g — найти все совпадения, а не только первое.
      • i — без учёта регистра.
      • m^ и $ сопоставляются с началом и концом каждой строки, а не только всей строки целиком.
      • s — разрешить . переносить и на новые строки.
      • u — трактовать шаблон как Unicode (важно для эмодзи и не-ASCII).
    3. Вставьте Тестовый текст в поле ниже. Используйте текст, который действительно похож на ваши реальные данные, — шаблон, безупречно работающий на аккуратных примерах, часто ошибается на более «грязных» данных.
    4. Читайте подсвеченный предпросмотр справа: каждое совпадение показано на месте, в контексте. Ниже идёт список групп захвата: для каждой указаны индекс, захваченный текст и смещение, где он был найден.

    Ключевые возможности#

    • Подсветка в реальном времени. Каждое совпадение отображается прямо поверх исходного текста, поэтому границы видны сразу — включая неловкий случай, когда совпадение пересекает пробельные символы.
    • Список групп захвата. Индекс группы, сопоставленная подстрока и смещение в символах — по одной строке на каждый захват. Это незаменимо, когда в шаблоне три-четыре группы и нужно различать их.
    • Несколько флагов сразу. Комбинируйте g, i, m, s, u как угодно (например giu для глобального, без учёта регистра и с поддержкой Unicode).
    • Предупреждение о ReDoS. Некоторые шаблоны — обычно вложенные кванторы вроде (a+)+ — могут разрастаться экспоненциально на специально подобранном вводе. Строка состояния помечает сам шаблон в момент первого совпадения и предлагает упростить его до встречи с враждебным вводом. Проверка читает форму шаблона; она не измеряет, сколько времени занял последний запуск, и по-настоящему катастрофический шаблон всё ещё способен намертво зависить вкладку — поэтому относитесь к предупреждению серьёзно.
    • Ограничения по-design. Ввод ограничен 250 000 символами, а список совпадений перестаёт расти после нескольких тысяч записей (панель захвата показывает первые 200), поэтому случайная вставка огромного файла не будет тихо выполняться бесконечно.
    • Без обращений к серверу. Шаблон и текст обрабатываются в вашем браузере; ничего никуда не отправляется.

    Разбор примера#

    Допустим, у вас есть список строк лога и вы хотите вытащить метод и путь из строк, которые начинаются с HTTP-глаголом. Используйте такой шаблон:

    (\w+)\s+(/[\w/-]+)

    с флагами gm и проверьте его на:

    GET /api/users
    POST /api/login
    DELETE /api/users/42
    not a log line
    PUT /api/items/3-qty

    Инструмент подсветит первую, вторую, третью и пятую строки (четвёртая не начинается со слова, за которым идёт путь). Список захвата для каждого совпадения отдельно сообщает метод и путь — так DELETE попадает в группу 1, а /api/users/42 в группу 2, и вы можете убедиться, что группа пути корректно включает завершающий сегмент -qty на последней строке.

    FAQ#

    Какой диалект регулярных выражений здесь используется?#

    Встроенный движок JavaScript — тот же, что применяется в String.prototype.match, RegExp.prototype.exec и в литералах регулярных выражений Node. Шаблон, работающий здесь, сработает без изменений и во фронтенд-коде, и на Node-сервере. Это не PCRE, RE2 и не Rust regex; если вы копируете шаблон из кодовой базы PHP или Go, проверьте его здесь, прежде чем полагаться на него.

    Инструмент предупреждает о возможном ReDoS. Что это значит?#

    Некоторые шаблоны можно заставить выполняться очень долго на враждебном вводе — классический пример: (a+)+b против строки из букв a без завершающей b. Злоумышленники используют это для denial-of-service сервисов, опирающихся на регулярки. Предупреждение — это статический анализ формы вашего шаблона (вложенные кванторы, перекрывающиеся альтернативы); оно срабатывает в момент, когда такой шаблон выдаёт совпадение, а не по времени последнего прогона. Если видите его — упростите шаблон: уберите вложенные кванторы, добавьте якоря или используйте атомарные группы, если целевой движок их поддерживает.

    Почему мой шаблон сопоставляется только один раз?#

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

    Сопоставляет ли . новые строки?#

    По умолчанию нет — . совпадает с любым символом, кроме терминатора строки. Добавьте флаг s (иногда его называют «dotall»), чтобы . переносил и новые строки; это удобно при сопоставлении блоков, содержащих переводы строк.