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

Ключевые элементы, которые стоит знать
Большинство повседневных шаблонов собирается из небольшого набора кирпичиков. Освойте их — и сможете читать подавляющее большинство регулярных выражений, встречающихся на практике.
Классы символов описывают допустимое множество символов. [aeiou] совпадает с любой гласной, [0-9] — с одной цифрой, [a-zA-Z] — с одной буквой. Каретка внутри скобок инвертирует набор: [^0-9] означает «любой символ, кроме цифры». Сокращения экономят время: \d — цифра, \w — символ слова (буквы, цифры, подчёркивание), \s — пробельный символ, а точка . совпадает почти с любым одним символом.
Квантификаторы указывают, сколько раз может повторяться предыдущий элемент. * означает ноль или больше, + — один или больше, ? — ноль или один (необязательный). Для точного счёта: {3} означает ровно три, {2,4} — от двух до четырёх. Таким образом, \d{4} совпадает с четырёхзначным годом, а colou?r — с обоими вариантами написания.
Якоря привязывают шаблон к позиции, а не к символу. ^ совпадает с началом текста, $ — с концом, \b обозначает границу слова. Шаблон ^Error совпадает только со строками, начинающимися с «Error», — именно то, что нужно при анализе логов.
Группы оборачивают часть шаблона в скобки — как для применения квантификатора к нескольким символам сразу, так и для захвата совпавшего текста для повторного использования. В шаблоне (\d{4})-(\d{2})-(\d{2}) каждая группа захватывает компонент даты, который можно извлечь отдельно. Чередование через вертикальную черту работает как «или»: cat|dog|fish совпадает с любым из трёх слов.
Шаблоны, которые реально используются на практике
Несколько повторяющихся задач покрывают большую часть реальной работы. Для email-подобных адресов [\w.+-]+@[\w-]+\.[\w.-]+ — практичная отправная точка; полная валидация электронной почты по формальной спецификации печально сложна, а нестрогий шаблон обычно и есть правильный выбор для подсветки кандидатов, но не для отклонения пользователей.
Для чисел \d+ захватывает последовательности цифр, а -?\d+(\.\d+)? совпадает с числами с необязательным знаком минус и дробной частью. Чтобы убрать ведущие и завершающие пробелы, достаточно совпасть с ^\s+|\s+$ и заменить на ничто. Для поиска повторяющихся слов шаблон с обратной ссылкой \b(\w+)\s+\1\b совпадает со словом, за которым следует его же повторение, где \1 ссылается обратно на первую захваченную группу.

Флаги изменяют поведение сопоставления
Флаги — это переключатели, влияющие на весь шаблон. Флаг глобального поиска (g) находит все совпадения, а не останавливается на первом — это нужно при подсветке всех вхождений. Флаг нечувствительности к регистру (i) позволяет шаблону error совпадать с «Error» и «ERROR». Флаг многострочного режима (m) меняет поведение ^ и $: они начинают совпадать с началом и концом каждой строки, а не всего текста, — это необходимо при построчной работе с логами. Другие полезные флаги: s (режим dotall, позволяющий точке совпадать с переносом строки) и u для полной поддержки Unicode.
Диалекты немного различаются по языкам
Регулярные выражения — это семья диалектов, а не единый стандарт. JavaScript, Python, PCRE (PHP), Java, .NET, Go и Rust совпадают в базовом синтаксисе, но расходятся в деталях: поддержка заглядывания назад, синтаксис именованных групп ((?<name>...) против (?P<name>...)), экранированные последовательности свойств Unicode и набор доступных флагов — всё это различается. Шаблон, работающий в одном движке, может потребовать небольшой правки в другом, поэтому стоит тестировать именно на том диалекте, который вы реально используете. Когда шаблон готов, наши инструменты разработчика и текстовые инструменты помогут с окружающей работой: чисткой, кодированием и преобразованием найденных данных.
Часто задаваемые вопросы
Мой текст отправляется на сервер?
Нет. Тестер регулярных выражений работает полностью в браузере. Ваш шаблон и образец текста остаются на устройстве и никогда не загружаются, поэтому можно безопасно вставлять конфиденциальные данные.
Какой диалект регулярных выражений использует этот инструмент?
Используется движок регулярных выражений JavaScript, встроенный в ваш браузер. Базовый синтаксис совпадает с тем, что применяется в большинстве языков, хотя некоторые расширенные возможности немного отличаются от PCRE, Python или .NET.
В чём разница между жадным и ленивым сопоставлением?
По умолчанию квантификаторы жадные и захватывают как можно больше текста. Добавление знака вопроса делает их ленивыми, и они захватывают как можно меньше. Например, шаблон с точкой и звёздочкой — жадный, а с точкой, звёздочкой и вопросом — ленивый.
Как совпасть с буквальным специальным символом?
Экранируйте его обратным слэшем. Чтобы совпасть с настоящей точкой, напишите обратный слэш и точку. То же самое применимо к другим метасимволам: скобкам, знаку плюса и вопросительному знаку.
Почему мой шаблон ничего не находит?
Типичные причины: отсутствие флага глобального поиска, якоря, привязывающие совпадение не к тому месту, незаэкранированный специальный символ или жадные квантификаторы, выходящие за нужную границу. Проверяйте шаблон по частям, чтобы найти виновника.
Можно ли захватывать части совпадения?
Да. Оберните часть шаблона в скобки, чтобы создать группу захвата. Каждая группа выводится отдельно, что позволяет извлекать поля, например год, месяц и день из даты.
