Регулярные выражения в 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— не граница слова.
Группы и альтернативы
(...)— захватывающая группа (сохраняет результат).(?:...)— незахватывающая группа (только для группировки).|— логическое ИЛИ (альтернатива).[...]— символьный класс (набор символов).