Регулярные выражения: RegExp, методы test(), match(), replace()

Что такое регулярные выражения? 🔍

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

// Простейший пример: поиск слова "JavaScript"
const regex = /JavaScript/;
console.log(regex.test("Люблю JavaScript!")); // true

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

Есть два способа создать RegExp:

1. Через литерал (удобно для статичных шаблонов):

const regex = /pattern/;

2. Через конструктор (полезно, если шаблон динамический):

const dynamicPattern = "hello";
const regex = new RegExp(dynamicPattern);

💡 Флаги (например, i для регистронезависимого поиска) добавляются после / или вторым аргументом конструктора: javascript const caseInsensitive = /javascript/i; // или new RegExp("javascript", "i")


Проверка строки: метод test()

Самый простой способ проверить соответствие строки шаблону — test(). Возвращает true или false.

const emailPattern = /\S+@\S+\.\S+/; // Простейшая проверка email
console.log(emailPattern.test("user@example.com")); // true
console.log(emailPattern.test("not-an-email"));     // false

⚠️ Будьте осторожны с простыми шаблонами! Например, этот regex пропустит user@com, что невалидно. Для прода лучше использовать проверенные библиотеки.


Извлечение совпадений: метод match()

Если нужно не просто проверить, но и получить совпадения, используйте match() у строки.

Без флага g (первое совпадение)

const str = "Python или JavaScript?";
const result = str.match(/javascript/i); // Регистронезависимый поиск
console.log(result[0]); // "JavaScript"

С флагом g (все совпадения)

const phones = "555-1234, 555-5678, 555-9012";
const matches = phones.match(/\d{3}-\d{4}/g);
console.log(matches); // ["555-1234", "555-5678", "555-9012"]

🔥 Если совпадений нет, match() вернёт null — не забудьте проверку!


Замена текста: метод replace()

Метод replace() позволяет заменять совпадения в строке. Может работать как с простыми строками, так и с RegExp.

Простая замена

let text = "Я люблю Java!";
console.log(text.replace("Java", "JavaScript")); // "Я люблю JavaScript!"

С использованием RegExp

let messyText = "Цена: $5, $10, $20";
let cleanText = messyText.replace(/\$/g, "₽"); // Заменяем все $ на ₽
console.log(cleanText); // "Цена: ₽5, ₽10, ₽20"

Использование групп захвата

let names = "Иванов Пётр, Сидоров Василий";
let swapped = names.replace(/(\w+)\s(\w+)/g, "$2 $1");
console.log(swapped); // "Пётр Иванов, Василий Сидоров"

Полезные шаблоны на практике

Проверка даты в формате DD.MM.YYYY

const datePattern = /^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[0-2])\.\d{4}$/;
console.log(datePattern.test("31.12.2023")); // true

Поиск хэштегов

const tweet = "Крутой #JavaScript и #WebDev!";
const hashtags = tweet.match(/#\w+/g);
console.log(hashtags); // ["#JavaScript", "#WebDev"]

Удаление лишних пробелов

let messyString = "Много    лишних    пробелов";
let cleanString = messyString.replace(/\s+/g, " ");
console.log(cleanString); // "Много лишних пробелов"

Когда RegExp — не лучший выбор

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

  • Сложного парсинга HTML/XML (лучше DOMParser)
  • Вложенных структур (например, JSON)
  • Грамматик с контекстно-зависимыми правилами

Для сложных задач подойдут специализированные парсеры, а RegExp оставьте для локальных и предсказуемых шаблонов.


Продвинутые возможности (на подумать)

  • Группы захвата/(\d{4})-(\d{2})/ позволяет разбить дату на год и месяц.
  • Обратные ссылки/(\w+) \1/ найдёт повторяющиеся слова.
  • Просмотры(?<=@)\w+ извлечёт имя после @ без захвата самого символа.

📌 Хотите глубже? Посмотрите курс Данилы Бежина про регулярки: youtube.com/@DanilaBezhin — там есть разбор реальных кейсов!


Подведём итоги

  • test() — быстрая проверка соответствия (true/false).
  • match() — извлечение совпадений (с g — все, без — первое).
  • replace() — замена текста по шаблону.
  • Литералы /.../ удобны для статичных шаблонов, new RegExp() — для динамических.
  • Регулярки мощные, но не всегда лучший инструмент для сложных задач.

Попробуйте применить эти методы в своём коде уже сегодня! 🚀

Скрыть рекламу навсегда

🎥 YouTube: программирование простым языком

Канал, где я спокойно и по шагам объясняю сложные темы — без заумных терминов и лишней теории.

Подходит, если раньше «не заходило», но хочется наконец понять.

▶️ Смотреть курсы на YouTube