Символы регулярных выражений в JavaScript: справочник с примерами

JS / Основы

Символы регулярных выражений в JavaScript: справочник с примерами

Метасимволы, классы, квантификаторы, группы, границы, lookaround и флаги JavaScript RegExp в компактном справочнике.

Опубликовано 04.09.2026 5 минут чтения
Содержание статьи

Регулярное выражение состоит из обычных символов и метасимволов со специальным значением. Этот справочник помогает читать шаблон, но не заменяет тесты: один символ может вести себя по-разному в зависимости от класса, флага и контекста.

Обычный текст и экранирование

JavaScript
const pattern = /cat/;​pattern.test('black cat'); // true​

Специальные символы ^ $ \\ . * + ? ( ) [ ] { } | / нужно экранировать обратным слешем, если они означают самих себя:

JavaScript
const filenamePattern = /^report\.pdf$/;const pricePattern = /^\d+\$$/;​

В regex-литерале / тоже экранируется: /https:\/\//. В строке для new RegExp() обратный слеш приходится экранировать второй раз.

Точка и символьные классы

Запись Значение
. любой символ, кроме перевода строки без флага s
\d цифра ASCII 0–9
\D не \d
\w ASCII-буква, цифра или _
\W не \w
\s пробельный символ
\S не \s
JavaScript
/c.t/.test('cat'); // true/\d{3}/.test('Код 404'); // true​

\w не охватывает кириллицу. Для букв разных письменностей:

JavaScript
const letters = /^\p{L}+$/u;​letters.test('Привет'); // trueletters.test('Hello');  // true​

Unicode property escapes работают с флагом u или v.

Квадратные скобки

Класс выбирает один символ из набора:

JavaScript
/[aeiou]/i.test('Sky');   // false/[0-9a-f]/i.test('F');   // true/[^0-9]/.test('123a');   // true​

  • [abc] — a, b или c;
  • [a-z] — диапазон;
  • [^abc] — любой символ, кроме перечисленных.

Дефис лучше ставить в начало или конец класса либо экранировать, если он должен быть буквальным. Символ ^ означает отрицание только сразу после [.

Квантификаторы

Запись Количество предыдущего элемента
* 0 или больше
+ 1 или больше
? 0 или 1
{n} ровно n
{n,} не меньше n
{n,m} от n до m
JavaScript
/^a*$/.test('');       // true/^a+$/.test('aaa');    // true/^colou?r$/.test('color'); // true/^\d{2,4}$/.test('2026'); // true​

Квантификатор относится только к предыдущему атому. Для повторения последовательности нужна группа:

JavaScript
/^(ha){2,3}$/.test('hahaha'); // true​

Жадность

Квантификаторы по умолчанию захватывают максимально возможный фрагмент:

JavaScript
const text = '<b>один</b><b>два</b>';​text.match(/<b>.*<\/b>/)?.[0];  // Вся строка.text.match(/<b>.*?<\/b>/)?.[0]; // Первый элемент.​

*?, +?, ?? и {n,m}? делают квантификатор ленивым. Но HTML не следует полноценно разбирать regex: для реальной разметки используйте DOMParser.

Группы

JavaScript
const match = '2026-08'.match(/^(\d{4})-(\d{2})$/);​console.log(match?.[1]); // '2026'console.log(match?.[2]); // '08'​

Виды групп:

  • (abc) — сохраняющая группа;
  • (?:abc) — несохраняющая;
  • (?<name>abc) — именованная;
  • \1 — обратная ссылка по номеру;
  • \k<name> — именованная обратная ссылка.
JavaScript
const quotePattern = /(?<quote>['"])(?<text>.*?)\k<quote>/;​

JavaScript не поддерживает комментарии вида (?# текст) внутри регулярного выражения. Сложный шаблон документируйте обычным комментарием рядом или собирайте из понятных частей.

Альтернатива

JavaScript
/^(cat|dog)$/.test('dog'); // true​

| имеет низкий приоритет. Скобки не дают якорям примениться только к одной ветке:

JavaScript
// Ошибочно для проверки всей строки: ^cat|dog$const animalPattern = /^(?:cat|dog)$/;​

Якоря и границы

Запись Значение
^ начало строки, а с m — начало каждой строки
$ конец строки, а с m — конец каждой строки
\b граница слова по модели \w
\B позиция не на границе слова
JavaScript
/^START$/m.test('one\nSTART\nthree'); // true​

\b ориентируется на понятие \w и может давать неожиданные результаты для кириллицы и других письменностей. Для Unicode-задач описывайте соседние классы явно и тестируйте выбранные языки.

Lookahead и lookbehind

Проверка контекста без включения его в результат:

  • (?=...) — положительный lookahead;
  • (?!...) — отрицательный lookahead;
  • (?<=...) — положительный lookbehind;
  • (?<!...) — отрицательный lookbehind.
JavaScript
const amountPattern = /\d+(?= ₽)/g;​'100 ₽ и 25 $'.match(amountPattern); // ['100']​

Lookbehind поддерживается современными движками, но для старых окружений проверьте совместимость.

Основные флаги

JavaScript
const pattern = /hello/giu;​

  • g — глобальный поиск;
  • i — без учёта регистра;
  • m — многострочные якоря;
  • s — dotAll;
  • u — Unicode-режим;
  • v — расширенные Unicode-наборы в поддерживающих окружениях;
  • y — sticky-поиск с текущего lastIndex;
  • d — индексы границ совпадений.

Флаги g и y делают объект состоянием: test() и exec() меняют lastIndex.

Короткий пример разбора лога

JavaScript
const logPattern = /^(?<level>INFO|WARN|ERROR)\s+(?<code>[A-Z]+-\d{4})$/;const match = 'ERROR API-5001'.match(logPattern);​if (match?.groups) {  console.log(match.groups.level); // 'ERROR'  console.log(match.groups.code);  // 'API-5001'}​

Что запомнить

Читайте regex слева направо: якорь, допустимые символы, количество, группы и флаги. Экранируйте литеральные метасимволы, не считайте \w Unicode-словом и помните о состоянии g/y. Сложный шаблон разбивайте и покрывайте примерами.

Сообщить об ошибке в статье

Рекомендации редакции

Другие публикации из этого раздела.

Новые материалы

Получайте практические разборы без информационного шума

Одна общая рассылка о новых статьях и инструментах. Адрес будет активироваться только после подтверждения.

Подписка появится после подключения сервиса рассылок и Yandex SmartCaptcha.