Проверка регулярных выражений
Проверка регулярных выражений
Тестер регулярных выражений: Тестирование регулярных выражений с мгновенным сопоставлением, управлением флагами, группами захвата, именованными группами и предпросмотром замены. Включает обнаружение рисков производительности и защиту от тайм-аута — подходит для валидации шаблонов, извлечения текста и пакетной замены Всё выполняется локально в браузере.
/
/g
Глобальный поиск
Без учёта регистра
Многострочный
Точка включает перенос строки
Режим Unicode
Фиксированная позиция
Тестовый текст
Текст замены
Результаты совпадений
Введите шаблон, чтобы начать сопоставление
Предварительный просмотр замены
Быстрый старт
Частые сценарии
Извлекайте идентификаторы, электронные письма, даты или пользовательские токены из журналов и текста После этого результат можно сразу скопировать, скачать или экспортировать.
Проверьте форматы пользовательского ввода перед интеграцией в код После этого результат можно сразу скопировать, скачать или экспортировать.
Пакетная замена содержимого с использованием групп захвата и именованных групп После этого результат можно сразу скопировать, скачать или экспортировать.
Рекомендации по использованию
Ограничения и совместимость
Конфиденциальность и безопасность
Частые вопросы
Регулярное выражение (regex) — это язык шаблонов для описания текстовых структур. Думайте об этом как о «расширенном поиске» — вместо поиска фиксированного слова вы ищете все, что соответствует правилу.\n\nНапример, \\d{4}-\\d{2}-\\d{2} соответствует всем датам в формате ГГГГ-ММ-ДД, а [\\w.]+@[\\w.]+ соответствует адресам электронной почты. Regex широко используется для: поиска и извлечения текста (поиск кодов ошибок в журналах), проверки формата (проверка телефонных номеров) и пакетной замены (преобразование форматов дат).\n\nПочти каждый язык программирования (JavaScript, Python, Java, Go и т. д.) и многие инструменты (VS Code, grep, sed) поддерживают регулярные выражения с в основном схожим синтаксисом. Этот инструмент использует механизм JavaScript RegExp для быстрого онлайн-тестирования и обучения.
Регулярное выражение JavaScript по умолчанию возвращает только первое совпадение — это поведение спецификации языка, а не ограничение инструмента. Нажмите кнопку g на панели флагов, чтобы включить глобальный поиск и просмотреть все совпадения.\n\nОбратите внимание на взаимодействие между g и y: g сканирует весь текст от начала до конца, а y (прикрепленный) требует, чтобы каждое совпадение начиналось именно там, где закончилось предыдущее — если между совпадениями есть пробелы, y останавливается на первом пробеле. Обычно достаточно просто включить g без y.
Существует четыре распространенных причины: \n\n1. Несовпадающие скобки: каждые (должно иметь совпадение), каждое [должно иметь совпадение]. IDE могут выполнять их автоматически, но этот инструмент требует сопряжения вручную.\n2. Неуместные квантификаторы: квантификаторы (*, +, ?, {n}) должны следовать за количественным элементом. Комбинации типа *+ или ?* недопустимы, если только первый квантификатор не равен ? для ленивой модификации (например, *?).\n3. Неполные escape-символы: одиночный символ \\ в конце недопустим: он должен экранировать определенный символ (например, \\d, \\n, \\\\).\n4. Для свойств Юникода требуется флаг u: \\p{L}, \\p{Script=Han} и аналогичные escape-последовательности свойств Юникода выдают ошибки без включенного флага u. Нажмите кнопку u, чтобы включить его.
Это замещающие ссылочные токены, определенные в JavaScript String.prototype.replace():\n\n- $1, $2, ..., $99: ссылка на содержимое, захваченное n-й группой захвата (...)\n- $&: весь совпавший текст\n- $`: текст перед match\n- $': текст после совпадения \n- ${name}: содержимое, захваченное именованной группой (?<name>...)\n\nНапример, шаблон (\\w+)\\s(\\w+), соответствующий "hello world" с заменой $2-$1 выдает «мировой привет». Чтобы включить в замену литерал $, используйте $$ для его экранирования.
Тайм-ауты почти всегда вызваны «катастрофическим возвратом». Когда механизм регулярных выражений встречает вложенные квантификаторы (например, (a+)+b) или перекрывающиеся необязательные пути, он возвращается к экспоненциальному числу комбинаций, вызывая взрыв времени сопоставления.\n\nТипичные опасные шаблоны: (a+)+, (.*?)*, (.+)+$ и т. д. Решения:\n1. Заменять . с точными классами символов, например. [^\\s]+ вместо .+\n2. Избегайте вложенных квантификаторов — замените (a+)+ на a+\n3. Уменьшите перекрывающиеся дополнительные пути — измените (a|ab)+ на a+b?\n\nПосле настройки шаблона нажмите кнопку «Повторить» в области результатов сопоставления. Инструмент имеет защиту по тайм-ауту в 4 секунды и не зависает ваш браузер.
В разных языках механизмы регулярных выражений различаются в трех основных областях: \n\n1. Поддержка синтаксиса варьируется: JavaScript не поддерживает рекурсивные шаблоны PCRE (?R), условные переходы (?(cond)yes|no) или атомарные группы (?>...). В модуле re Python они также отсутствуют, но его модуль регулярных выражений поддерживает их. Java поддерживает атомарные группы, но не рекурсию.\n2. Обработка Unicode отличается: Python 3 по умолчанию обрабатывает \\w, \\d как Unicode; По умолчанию JavaScript использует ASCII — вам необходимо включить флаг u вручную. Это означает, что \\w не будет соответствовать китайским символам, а границы слов \\b не применяются между символами CJK.\n3. Семантика новой строки различается: Python . по умолчанию не соответствует \\n (так же, как JavaScript), а Java Pattern.DOTALL ведет себя так же, как флаг s JavaScript.\n\nРекомендация: используйте этот инструмент для быстрой проверки логики, а затем выполните окончательное подтверждение с помощью механизма вашего целевого языка.