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

Регулярные выражения (regex) — это шаблоны для сопоставления текста. Этот инструмент анализирует синтаксис regex, объясняет компоненты шаблона и предоставляет область тестирования для проверки совпадений с образцом текста. Поддерживает форматы regex JavaScript, PCRE и Python.

Спецификации

Типичные сценарии использования

  • Отладка причин несовпадения regex с ожидаемым текстом
  • Изучение синтаксиса regex через объяснения
  • Тестирование шаблонов перед добавлением в код
  • Валидация входных шаблонов для полей форм
  • Извлечение данных из структурированного текста (логи, CSV, HTML)

Возможности

  • Определение формата regex (JavaScript /pattern/flags, PCRE #pattern#, Python r"pattern")
  • Объяснение компонентов шаблона простым языком
  • Тестирование на образце текста с подсветкой совпадений
  • Режим одиночного совпадения или поиска всех совпадений
  • Отображение групп захвата и их содержимого
  • Отображение именованных групп захвата
  • Показ позиций и индексов совпадений
  • Отображение времени выполнения regex
  • Метки возможностей шаблона (якоря, квантификаторы и т.д.)
  • Предупреждения о шаблоне
  • Библиотека распространённых шаблонов (email, URL, телефон и т.д.)

Примеры

Шаблон email

Попробовать →

Regex для сопоставления адресов электронной почты.

/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/i

Regex для сопоставления HTTP/HTTPS URL.

/https?:\/\/[^\s]+/g

Шаблон даты

Попробовать →

Regex для дат YYYY-MM-DD с группами захвата.

/(\d{4})-(\d{2})-(\d{2})/

Советы

  • Используйте онлайн-тестеры для отладки сложных шаблонов перед внедрением в продакшн.
  • Экранируйте специальные символы (. ^ $ * + ? { } [ ] \ | ( )) обратной косой чертой.
  • Именованные группы захвата (?<name>...) делают совпадения более читаемыми.
  • Флаг g находит все совпадения; без него возвращается только первое совпадение.
  • Будьте осторожны с жадными квантификаторами (* +); при необходимости используйте ленивые (*? +?).

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

Регулярные выражения (regex) — это язык сопоставления шаблонов, используемый практически в каждом языке программирования, текстовом редакторе и инструменте командной строки. Regex определяет шаблон поиска, используя комбинацию литеральных символов и метасимволов, которые соответствуют классам строк. Они незаменимы для валидации ввода, извлечения текста, операций поиска и замены и анализа логов.

Основной синтаксис включает классы символов ([a-z], \\d, \\w, \\s), квантификаторы (*, +, ?, {n,m}), якоря (^, $, \\b), чередование (|) и группировку скобками. Захваченные группы извлекают совпавшие подстроки и обеспечивают обратные ссылки. Опережающие проверки (?=...) и ретроспективные проверки (?<=...) сопоставляют позиции без потребления символов, позволяя делать сложные утверждения об окружающем контексте.

JavaScript regex имеет собственный диалект со специфическими флагами: g (глобальный), i (без учёта регистра), m (многострочный), s (dotAll), u (Unicode) и y (липкий). Флаг u становится всё более важным для корректной обработки текста Unicode, так как без него шаблоны могут некорректно сопоставлять многобайтные символы. Именованные группы захвата (?<name>...) улучшают читаемость по сравнению с нумерованными группами.

Типичные задачи regex включают валидацию email, разбор URL, извлечение данных из структурированного текста (лог-файлы, CSV) и замену шаблонов при рефакторинге кода. Однако regex имеет ограничения — он не может разбирать вложенные структуры, такие как HTML или JSON (используйте полноценный парсер), а чрезмерно сложные шаблоны становятся нечитаемыми и неподдерживаемыми. Шутка «теперь у вас две проблемы» отражает реальные проблемы сопровождения сложных regex.

HTML — это контекстно-свободный язык с вложенными структурами, которые регулярные выражения принципиально не могут обработать. Regex не может корректно сопоставить открывающие и закрывающие теги с произвольной глубиной вложенности. Простые случаи могут казаться работающими, но ломаются на граничных случаях с вложенными тегами, атрибутами, содержащими >, или комментариями. Для обработки HTML используйте DOM-парсер, такой как DOMParser в браузере, cheerio для Node.js или BeautifulSoup для Python.

Разница между .* (жадный) и .*? (ленивый) квантификаторами существенна для поведения сопоставления. Жадный .* захватывает максимально возможное количество символов, а затем откатывается при необходимости. Ленивый .*? захватывает минимально возможное количество символов. В строке "<b>раз</b><b>два</b>" жадный шаблон <b>.*</b> захватывает всю строку, тогда как ленивый шаблон <b>.*?</b> захватывает только первое "<b>раз</b>". Выбор неправильного режима — одна из самых распространённых причин неожиданного поведения regex.

В JavaScript флаг u (/pattern/u) включает Unicode-совместимое сопоставление. Без него метасимвол . не сопоставляет символы за пределами базовой многоязыковой плоскости (такие как эмодзи), а \\w сопоставляет только ASCII-символы слов. Флаг u обеспечивает корректную обработку суррогатных пар квантификаторами и классами символов, а также включает экранирование свойств Unicode, такое как \\p{Letter}. Опережающие проверки (?=...) и ретроспективные проверки (?<=...) — это утверждения нулевой ширины, которые проверяют наличие шаблонов в позиции, не включая их в совпадение. Положительная опережающая проверка (?=...) утверждает, что должно следовать, а отрицательная (?!...) — что не должно. Например, \\d+(?= dollars) сопоставляет числа, за которыми следует " dollars", но захватывает только само число. Ретроспективные проверки работают аналогично, но проверяют предшествующий текст.

← Вернуться ко всем инструментам