Регулярные выражения: шаблоны, флаги и практические примеры
Как работают регулярные выражения в JavaScript: флаги, классы символов, якоря и готовые шаблоны для email, URL и телефонных номеров.
Регулярные выражения — это язык поиска по шаблону, встроенный почти в каждую среду программирования. Синтаксис выглядит пугающе поначалу: все эти обратные слэши и скобки. Но стоит разобраться с десятком конструкций, которые встречаются в 90% реальных шаблонов, — и становится заметно проще.
Когда regex оправдывает себя
Regex имеет смысл, когда у искомого есть внутренняя структура: email-адрес, номер версии, дата в конкретном формате, строка в лог-файле, начинающаяся с временной метки.
Для простого поиска подстроки используйте includes(). Для «похоже ли это на телефонный номер» — regex. Время на написание шаблона окупается, когда простые строковые методы потребовали бы пяти строк логики.
Четыре флага, которые стоит знать
g — глобальный. Без него движок находит первое совпадение и останавливается. С ним вы получаете все.
i — без учёта регистра. /ошибка/i найдёт «Ошибка», «ОШИБКА» и «ошибка».
m — многострочный. По умолчанию ^ и $ совпадают с началом и концом всей строки целиком. С флагом m они совпадают с началом и концом каждой строки. Это сбивает с толку многих.
s — dotAll. Точка . по умолчанию не совпадает с переводом строки. С флагом s — совпадает, что удобно, когда контент занимает несколько строк.
Флаги можно комбинировать: gi, gim, gis.
Шаблоны, которые встречаются постоянно
Вот несколько, которые стоит сохранить:
Email (достаточно для большинства случаев)
[\w.+-]+@[\w-]+\.[a-z]{2,}
Все целые числа в строке
\d+
Слова, начинающиеся с заглавной буквы
\b[A-Z][a-z]+\b
Дата в формате ISO (ГГГГ-ММ-ДД)
\d{4}-\d{2}-\d{2}
URL
https?://[\w./%-?=&#]+
Ни один из них не идеален. Шаблон для email не обрабатывает все граничные случаи — но читаемый шаблон с точностью 99% лучше, чем 200-символьный монстр, соответствующий RFC, который невозможно отладить при первой же проблеме.
Три ошибки, на которых спотыкаются все
Забыть экранировать специальные символы. Точка . в regex означает «любой символ». /3.14/ также совпадёт с 3x14. Буквальная точка пишется как \..
Использовать ^ и $ в многострочном тексте без флага m. В итоге ничего не находится и непонятно почему.
Вложенные квантификаторы с чередованием. (a|ab)+ на длинной строке, которая не совпадает, может вызвать катастрофический возврат и заморозить поток. Если в шаблоне есть вложенные группы с квантификаторами — проверяйте его на длинных входных данных, прежде чем отдавать в продакшен.
Именованные группы захвата
В JavaScript именованные группы появились в ES2018. Синтаксис: (?<name>шаблон):
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
Примените к строке «2026-05-27» — и получите match.groups.year === "2026" вместо того, чтобы вспоминать, какой индекс за что отвечает. Читать такой код через полгода значительно проще.
Как использовать тестер
Вставьте шаблон в тестер регулярных выражений — только сам шаблон, без окружающих косых черт. Добавьте нужные флаги в поле после второй косой черты. Вставьте тестовый текст в область ниже.
Совпадения подсвечиваются сразу. В разделе деталей отображается значение и позиция каждого совпадения в строке. Если вы использовали именованные группы, их значения тоже отображаются рядом с совпадением.
Всё работает в браузере — ваши данные никуда не отправляются.