Тестер регулярных выражений
РазработкаПроверяйте регулярные выражения JavaScript с подсветкой совпадений и группами захвата.
На этой странице
Что такое тестер регулярных выражений?#
Регулярное выражение — это компактная нотация для описания шаблонов в тексте: «всё, что похоже на email», «третье слово каждой строки», «все числа не внутри кавычек». Написать шаблон — лишь половина дела; вторая половина — увидеть, что он реально сопоставляет, на тексте, похожем на ваш, до того как вы вставите его в продакшен-код. Тестер регулярных выражений — это страница, где этим занимаются.
Этот инструмент применяет ваш шаблон к образцу текста в реальном времени, подсвечивает каждое совпадение прямо по месту и перечисляет каждую группу захвата отдельно, чтобы вы могли убедиться не только в том, что совпадение произошло, но и в том, что именно было захвачено. Используется движок регулярных выражений JavaScript (тот же, что уже понимают ваш браузер и Node), поэтому поведение здесь совпадает с тем, что сделает ваш код.
Как пользоваться#
- Введите Шаблон между двумя маркерами
/в левом верхнем углу. Слеши вводить не нужно — они нарисованы за вас, как при записи литерала регулярного выражения в коде. - Введите Флаги в маленьком поле справа от шаблона. Те, что понадобятся чаще всего:
g— найти все совпадения, а не только первое.i— без учёта регистра.m—^и$сопоставляются с началом и концом каждой строки, а не только всей строки целиком.s— разрешить.переносить и на новые строки.u— трактовать шаблон как Unicode (важно для эмодзи и не-ASCII).
- Вставьте Тестовый текст в поле ниже. Используйте текст, который действительно похож на ваши реальные данные, — шаблон, безупречно работающий на аккуратных примерах, часто ошибается на более «грязных» данных.
- Читайте подсвеченный предпросмотр справа: каждое совпадение показано на месте, в контексте. Ниже идёт список групп захвата: для каждой указаны индекс, захваченный текст и смещение, где он был найден.
Ключевые возможности#
- Подсветка в реальном времени. Каждое совпадение отображается прямо поверх исходного текста, поэтому границы видны сразу — включая неловкий случай, когда совпадение пересекает пробельные символы.
- Список групп захвата. Индекс группы, сопоставленная подстрока и смещение в символах — по одной строке на каждый захват. Это незаменимо, когда в шаблоне три-четыре группы и нужно различать их.
- Несколько флагов сразу. Комбинируйте
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»), чтобы . переносил и новые строки; это удобно при сопоставлении блоков, содержащих переводы строк.