Регулярные выражения в JavaScript с примерами для начинающих

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

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

Начать курс

Введение в регулярные выражения JavaScript

Регулярные выражения (regex или regexp) — это мощный инструмент для поиска, замены и проверки строк по заданному шаблону. В JavaScript (и Node.js) они реализованы через встроенный объект RegExp.

Для новичка синтаксис regex может показаться пугающим, но на самом деле это просто язык описания шаблонов. Освоив базовые конструкции, вы сможете:

  • Валидировать email, телефон, URL
  • Извлекать данные из текста (парсинг)
  • Заменять подстроки по сложным правилам
  • Фильтровать и обрабатывать пользовательский ввод

В этой статье мы разберем регулярные выражения в JavaScript с примерами на Node.js. Все примеры можно запустить в консоли или в среде выполнения.

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

В JavaScript есть два способа создать regex:

1. Литеральный синтаксис (рекомендуется)

const pattern = /hello/;  // Ищет слово "hello"

Шаблон заключается между двумя слэшами. После закрывающего слэша можно указать флаги (например, i — регистронезависимый поиск).

2. Конструктор RegExp

const pattern = new RegExp('hello');  // Аналог /hello/

Используется, когда шаблон динамический (формируется из переменной).

Флаги регулярных выражений

  • i — игнорировать регистр (/hello/i найдет "Hello", "HELLO")
  • g — глобальный поиск (ищет все совпадения, а не первое)
  • m — многострочный режим (смена поведения якорей ^ и $)
  • s — точка соответствует символу перевода строки
  • u — поддержка Unicode
  • y — липкий поиск (ищет только с позиции lastIndex)
const regex = /javascript/gi;  // Ищет "javascript" глобально и без учета регистра

Основные методы работы с regex в JavaScript

Рассмотрим ключевые методы, которые используются с регулярными выражениями.

test() — проверка наличия шаблона

Возвращает true или false. Самый быстрый метод для валидации.

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

exec() — поиск с деталями

Возвращает массив с совпадением и группами. При флаге g запоминает позицию.

const str = 'Цена: 100 руб, скидка: 20 руб';
const pricePattern = /(\d+)\sруб/g;
let match;
while ((match = pricePattern.exec(str)) !== null) {
  console.log(`Найдено: ${match[0]}, число: ${match[1]}`);
}
// Вывод:
// Найдено: 100 руб, число: 100
// Найдено: 20 руб, число: 20

match() — поиск в строке

Метод строки. Без флага g возвращает первое совпадение (как exec). С флагом g — массив всех совпадений.

const text = 'JS — это JavaScript, не путайте с Java.';
const jsMatches = text.match(/Java\w*/g);
console.log(jsMatches); // ['JavaScript', 'Java']

replace() — замена по шаблону

Заменяет совпадения на новую строку. Поддерживает специальные символы ($1, $&).

const phone = '+7 (123) 456-78-90';
const cleanPhone = phone.replace(/[\s\(\)\-]/g, '');
console.log(cleanPhone); // +71234567890

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

search() — индекс первого совпадения

const index = 'Hello world'.search(/world/);
console.log(index); // 6

Базовые символы и конструкции regex

Чтобы писать свои шаблоны, нужно знать основные метасимволы.

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

  • ^ — начало строки (или строки с флагом m)
  • $ — конец строки
  • \b — граница слова
  • \B — не граница слова
console.log(/^Hello/.test('Hello world')); // true
console.log(/world$/.test('Hello world')); // true
console.log(/\bcat\b/.test('The cat sat')); // true (целое слово)
console.log(/\bcat\b/.test('category'));    // false

Классы символов

  • \d — любая цифра (0-9)
  • \w — буква, цифра или подчеркивание
  • \s — пробельный символ (пробел, табуляция, перевод строки)
  • . — любой символ, кроме перевода строки
  • [...] — набор символов (например, [aeiou] — гласные)
  • [^...] — отрицание набора
// Найти все цифры в строке
console.log('Год 2024, месяц 03'.match(/\d+/g)); // ['2024', '03']

// Найти слова из 3 букв
console.log('The cat and dog'.match(/\b\w{3}\b/g)); // ['The', 'cat', 'and', 'dog']

Квантификаторы (повторения)

  • * — 0 или более раз
  • +

Блоги

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