Регулярные выражения в JavaScript: практический старт
Содержание
О проверке кода. Примеры не запускались — в отличие от материалов по Node.js с фактическим выводом. Говорим прямо, а не ставим бейдж «проверено».
Регулярные выражения пугают синтаксисом, но для 90% задач хватает десятка конструкций. Разберём практический минимум для JavaScript — без превращения в справочник.
Что это и как создать
Регулярка — шаблон для поиска и проверки текста. Два способа записи:
const re1 = /\d+/g; // литерал — основной способ
const re2 = new RegExp('\\d+', 'g'); // конструктор — когда шаблон в переменной
Литерал /шаблон/флаги используют почти всегда. Конструктор new RegExp нужен, когда шаблон собирается динамически из переменной (тогда спецсимволы экранируют двойным слэшем).
Основные методы
const re = /\d+/;
re.test('abc123'); // true — есть ли совпадение (быстрая проверка)
'abc123def456'.match(/\d+/g); // ['123', '456'] — все совпадения (с флагом g)
'цена: 100'.replace(/\d+/, 'X'); // 'цена: X' — замена
test— есть ли совпадение, возвращаетtrue/false. Самый частый и быстрый;match— извлекает совпадения. С флагомg— массив всех, без него — первое с деталями;replace— заменяет (мы видели его у строк); с регуляркой и флагомgменяет все вхождения.
Синтаксис: минимум, который нужен
Классы символов
Что искать
\d— цифра,\D— не цифра\w— буква/цифра/_,\s— пробел.— любой символ[a-z]— диапазон,[абв]— набор
Количество и позиция
Сколько и где
+— один и более,*— ноль и более?— ноль или один,{2,4}— от 2 до 4^— начало,$— конец строки|— или,( )— группа
/^\d{4}$/.test('2026'); // true — ровно 4 цифры от начала до конца
/^\+7\d{10}$/.test('+79001234567'); // телефон: +7 и 10 цифр
/[а-яё]+/i.test('Привет'); // true — есть кириллица (i = без регистра)
^...$ фиксирует шаблон на всю строку — без них регулярка найдёт совпадение в любом месте. Это частая ошибка валидации: /\d{4}/ совпадёт и в 'abc2026xyz'.
Флаги
/abc/g // global — все совпадения, не только первое
/abc/i // ignore case — без учёта регистра
/abc/m // multiline — ^ и $ работают на каждой строке
/abc/gi // комбинация флагов
Флаг g — самый важный: без него match и replace обработают только первое совпадение. Флаг i избавляет от [a-zA-Zа-яА-Я] при поиске без учёта регистра. Флаги комбинируются: /.../gi.
Группы захвата
Скобки ( ) вытаскивают части совпадения:
const date = '2026-07-17';
const m = date.match(/(\d{4})-(\d{2})-(\d{2})/);
// m[0] = '2026-07-17' (всё), m[1] = '2026', m[2] = '07', m[3] = '17'
// именованные группы — читаемее
const m2 = date.match(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/);
m2.groups.year; // '2026'
m2.groups.month; // '07'
Группы ( ) захватывают части совпадения в массив: m[0] — всё совпадение, дальше содержимое групп по порядку. Именованные группы (?<year>...) дают доступ по имени через .groups — код гораздо читаемее, чем m[1], m[2].
Группы работают и в замене:
'2026-07-17'.replace(/(\d{4})-(\d{2})-(\d{2})/, '$3.$2.$1'); // '17.07.2026'
match против matchAll
const text = 'цена 100 и 200 рублей';
// match с g — все совпадения, но БЕЗ групп
text.match(/(\d+)/g); // ['100', '200'] — только совпадения
// matchAll — все совпадения С группами
for (const m of text.matchAll(/(\d+)/g)) {
console.log(m[0], m.index); // '100' 5, потом '200' 11
}
Тонкость: match с флагом g возвращает только совпадения, теряя группы. Если нужны и все совпадения, и их группы — берут matchAll, который отдаёт итератор для for...of. Это стандартный способ разобрать много однотипных фрагментов.
Когда регулярку писать НЕ надо
Регулярные выражения — мощный инструмент, но не универсальный:
- HTML, XML, JSON — не парсите регуляркой. Это вложенные структуры, регулярка ломается на реальных данных. Нужен настоящий парсер (
JSON.parse, DOM); - сложная валидация email — «правильная» регулярка для email чудовищна и всё равно неполна. Часто достаточно проверить наличие
@и попытаться отправить письмо; - простой поиск подстроки —
includesчитается лучше, чем/abc/.test().
Правило: если шаблон стал нечитаемым или структура вложенная — регулярка не тот инструмент. Берите парсер или разбейте задачу.
Смежные темы: строки — где применяются регулярки; итераторы и генераторы — matchAll; JSON — вместо парсинга регуляркой. Полный список — в уроках JavaScript.