Регулярные выражения: 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()— для динамических. - Регулярки мощные, но не всегда лучший инструмент для сложных задач.
Попробуйте применить эти методы в своём коде уже сегодня! 🚀