Тестер регулярных выражений
Регулярные выражения (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Советы
- Используйте онлайн-тестеры для отладки сложных шаблонов перед внедрением в продакшн.
- Экранируйте специальные символы (. ^ $ * + ? { } [ ] \ | ( )) обратной косой чертой.
- Именованные группы захвата (?<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", но захватывает только само число. Ретроспективные проверки работают аналогично, но проверяют предшествующий текст.