Регулярные выражения в JavaScript с примерами для Node.js

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Регулярные выражения в JavaScript: полное руководство с примерами

Регулярные выражения (regexp или regex) — это мощный инструмент для поиска, замены и валидации текстовых данных. В JavaScript, особенно в среде Node.js, регулярные выражения используются повсеместно: от обработки логов и парсинга URL до валидации форм и разметки текста. В этой статье мы разберём основы работы с регулярными выражениями в JavaScript, рассмотрим синтаксис, методы и приведём практические примеры для Node.js.

Создание регулярных выражений в JavaScript

В JavaScript есть два способа создать регулярное выражение:

  • Литеральная запись — самый удобный и распространённый способ: /pattern/flags.
  • Конструктор RegExp — используется, когда шаблон создаётся динамически: new RegExp('pattern', 'flags').

Примеры:

// Литеральная запись
const regexLiteral = /hello/i; // флаг i — игнорировать регистр

// Конструктор RegExp
const pattern = 'hello';
const regexConstructor = new RegExp(pattern, 'i');

console.log(regexLiteral.test('Hello, world!')); // true
console.log(regexConstructor.test('HELLO'));      // true

Основные флаги (модификаторы)

  • i — игнорирование регистра (case-insensitive).
  • g — глобальный поиск (ищет все совпадения, а не первое).
  • m — многострочный режим (якоря ^ и $ работают для каждой строки).
  • s — «dotall» режим (точка . включает символ новой строки \n).
  • u — полная поддержка Unicode.
  • y — «sticky» режим (поиск с текущей позиции).

Методы регулярных выражений в JavaScript

В JavaScript регулярные выражения работают вместе с несколькими методами строк и самого RegExp.

Метод test()

Проверяет, есть ли совпадение в строке. Возвращает true или false.

const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(emailRegex.test('user@example.com')); // true
console.log(emailRegex.test('invalid-email'));    // false

Метод exec()

Выполняет поиск и возвращает массив с результатами или null. Полезен для извлечения групп.

const urlRegex = /https?:\/\/([^\/]+)\/(.*)/;
const url = 'https://pythonlib.ru/regular-expressions';
const match = urlRegex.exec(url);

if (match) {
  console.log('Домен:', match[1]); // pythonlib.ru
  console.log('Путь:', match[2]);  // regular-expressions
}

Методы строк, работающие с regexp

  • str.match(regex) — возвращает массив совпадений (или null).
  • str.matchAll(regex) — возвращает итератор всех совпадений (с группами).
  • str.replace(regex, replacement) — заменяет совпадения.
  • str.search(regex) — возвращает индекс первого совпадения (-1, если нет).
  • str.split(regex) — разбивает строку по регулярному выражению.
const text = 'Код: 12345, артикул: ABC-6789';

// match — найти все цифры
const numbers = text.match(/\d+/g);
console.log(numbers); // ['12345', '6789']

// replace — заменить дефис на двоеточие
const cleaned = text.replace(/-/g, ':');
console.log(cleaned); // 'Код: 12345, артикул: ABC:6789'

// split — разбить по запятым и пробелам
const parts = text.split(/,\s*/);
console.log(parts); // ['Код: 12345', 'артикул: ABC-6789']

Основные шаблоны и спецсимволы

Для создания точных шаблонов используются метасимволы и квантификаторы. Вот самые важные из них:

Базовые символы

  • . — любой символ (кроме \n без флага s).
  • \d — цифра (0-9).
  • \w — буква, цифра или подчёркивание (a-z, A-Z, 0-9, _).
  • \s — любой пробельный символ (пробел, табуляция, новая строка).
  • \D, \W, \S — отрицания (всё, что НЕ цифра, НЕ слово, НЕ пробел).

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

  • + — один или более раз.
  • * — ноль или более раз.
  • ? — ноль или один раз (делает предыдущий символ необязательным).
  • {n} — ровно n раз.
  • {n,} — n или более раз.
  • {n,m} — от n до m раз.

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

  • ^ — начало строки (или начало строки при флаге m).
  • $ — конец строки.
  • \b — граница слова.
  • \B — не граница слова.

Группы и альтернативы

  • (...) — захватывающая группа (сохраняет результат).
  • (?:...) — незахватывающая группа (только для группировки).
  • | — логическое ИЛИ (альтернатива).
  • [...] — символьный класс (набор символов).

Блоги

Рекомендаций по книгам