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

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

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

Начать курс

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

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

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

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

  • Литеральный синтаксис — шаблон заключается в слеши /pattern/flags. Рекомендуется для статических шаблонов.
  • Конструктор RegExp — new RegExp('pattern', 'flags'). Используется, если шаблон формируется динамически.
// Литеральный способ
const regexLiteral = /hello/i;

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

console.log(regexLiteral.test('Hello World')); // true
console.log(regexConstructor.test('Hello World')); // true

2. Основные методы работы с регулярными выражениями

В Node.js и браузерах доступны четыре ключевых метода для работы с regex. Разберём каждый на примерах.

Метод test()

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

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

Метод exec()

Ищет совпадение и возвращает массив с деталями (само совпадение, группы, индекс, входная строка). Если совпадений нет — null.

const text = 'Цена: 1500 рублей, скидка: 300 рублей';
const regex = /(\d+)\sрублей/g;
let match;

while ((match = regex.exec(text)) !== null) {
  console.log(`Найдено: ${match[1]} рублей`); 
  // Вывод: "Найдено: 1500 рублей"
  // Вывод: "Найдено: 300 рублей"
}

Метод match()

Вызывается на строке. Возвращает массив совпадений (с флагом g) или детальную информацию (без флага g).

const logLine = 'Ошибка 404: страница не найдена';
const errorRegex = /(\d{3}):\s(.+)/;
const result = logLine.match(errorRegex);

console.log(result[0]); // '404: страница не найдена'
console.log(result[1]); // '404'
console.log(result[2]); // 'страница не найдена'

Метод replace()

Заменяет совпадения на указанную строку или результат функции. Отлично подходит для форматирования данных.

const phone = '+7 (999) 123-45-67';
const cleanPhone = phone.replace(/[\s\-\(\)\+]/g, '');
console.log(cleanPhone); // '79991234567'

// Замена с использованием групп
const date = '2024-01-15';
const formattedDate = date.replace(/(\d{4})-(\d{2})-(\d{2})/, '$3.$2.$1');
console.log(formattedDate); // '15.01.2024'

3. Основные символы и флаги регулярных выражений

Чтобы эффективно работать с regex, нужно понимать базовые метасимволы и флаги. Вот ключевые из них:

Символы для поиска

  • . — любой символ (кроме перевода строки)
  • \d — цифра (0-9)
  • \w — буква, цифра или подчеркивание
  • \s — пробельный символ
  • ^ — начало строки
  • $ — конец строки
  • * — 0 или более повторений
  • + — 1 или более повторений
  • ? — 0 или 1 повторение
  • {n,m} — от n до m повторений

Флаги

  • g — глобальный поиск (все совпадения, а не первое)
  • i — регистронезависимый поиск
  • m — многострочный режим (^ и $ работают для каждой строки)
  • s — точка включает символ перевода строки
// Пример с флагом m
const multiline = `Первая строка
Вторая строка
Третья строка`;

const regexMultiline = /^Вторая/m;
console.log(regexMultiline.test(multiline)); // true

4. Практические примеры для Node.js

Рассмотрим три реальные задачи, которые часто встречаются при разработке на Node.js.

Пример 1: Валидация email

function isValidEmail(email) {
  const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
  return emailRegex.test(email);
}

console.log(isValidEmail('test@domain.com')); // true
console.log(isValidEmail('user@.com')); // false

Пример 2: Парсинг URL из текста

function extractUrls(text) {
  const urlRegex = /https?:\/\/[^\s]+/g;
  return text.match(urlRegex) || [];
}

const message = 'Посетите https://example.com и http://test.org для деталей.';
console.log(extractUrls(message)); 
// ['https://example.com', 'http://test.org']

Пример 3: Обработка логов сервера

const logEntry = '192.168.1.1 - - [10/Jan/2024:12:34:56] "GET /api/data HTTP/1.1" 200 1234';

const logRegex = /^(\S+).+\[(.+)\]\s"(\w+)\s(\/\S+)\sHTTP\/\d\.\d"\s(\d+)\s(\d+)$/;
const parsed = logEntry.match                

Блоги

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