Регулярные выражения в JavaScript с примерами: на практике
Регулярные выражения (RegExp) — это мощный инструмент для поиска, замены и проверки строк. В JavaScript и Node.js они используются повсеместно: от валидации форм до парсинга логов. В этой статье мы разберем основы синтаксиса, популярные методы и решим несколько практических задач.
1. Создание регулярного выражения
В JavaScript есть два способа создать регулярное выражение:
- Литеральная запись (рекомендуется):
/pattern/flags - Конструктор
new RegExp('pattern', 'flags')
Пример:
// Литеральная запись
const regexLiteral = /hello/i;
// Конструктор (полезно, когда паттерн динамический)
const pattern = 'hello';
const regexConstructor = new RegExp(pattern, 'i');
console.log(regexLiteral.test('Hello World')); // true
console.log(regexConstructor.test('HELLO')); // true
2. Основные методы RegExp и String
Для работы с регулярными выражениями в JavaScript используются два типа методов: методы самого объекта RegExp и методы строк.
2.1 Метод 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
2.2 Метод exec()
Ищет совпадение и возвращает массив с детальной информацией (или null). Полезен для извлечения данных.
const str = 'Цена: 1500 рублей, скидка: 200 рублей';
const priceRegex = /(\d+)/g;
let match;
while ((match = priceRegex.exec(str)) !== null) {
console.log(`Найдено число: ${match[1]}`);
}
// Вывод:
// Найдено число: 1500
// Найдено число: 200
2.3 Метод строки match()
Работает аналогично exec(), но вызывается от строки.
const text = 'JavaScript — это круто! JS используется везде.';
const result = text.match(/JS/g);
console.log(result); // [ 'JS', 'JS' ]
2.4 Метод строки replace()
Заменяет найденные совпадения на указанную строку или результат функции.
const phone = '+7 (123) 456-78-90';
const cleaned = phone.replace(/[\s\-\(\)\+]/g, '');
console.log(cleaned); // 71234567890
// Замена с использованием групп захвата
const date = '2024-03-15';
const formatted = date.replace(/(\d{4})-(\d{2})-(\d{2})/, '$3.$2.$1');
console.log(formatted); // 15.03.2024
2.5 Метод строки search()
Возвращает индекс первого совпадения или -1.
const sentence = 'Учите JavaScript на PythonLib';
const index = sentence.search(/javascript/i);
console.log(index); // 6
3. Флаги и спецсимволы: практические примеры
Флаги изменяют поведение поиска. Самые популярные:
g— глобальный поиск (ищет все совпадения, а не первое).i— регистронезависимый поиск.m— многострочный режим (якоря^и$работают на каждой строке).
Пример с флагом m:
const multiLineText = `Первая строка
вторая строка
Третья строка`;
// Без флага m
console.log(multiLineText.match(/^вторая/)); // null
// С флагом m
console.log(multiLineText.match(/^вторая/m)); // [ 'вторая' ]
Основные спецсимволы
| Символ | Описание | Пример |
|---|---|---|
. |
Любой символ, кроме новой строки | /х.й/ найдет "хай", "хой" |
\d |
Цифра (0-9) | /\d+/ найдет число |
\w |
Буква, цифра или "_" | /\w+/ найдет слово |
\s |
Пробельный символ | /\s+/ найдет пробелы |
^ |
Начало строки | /^Привет/ |
$ |
Конец строки | /конец$/ |
[abc] |
Любой символ из набора | /[aeiou]/ найдет гласную |
(x|y) |
Логическое ИЛИ | /(кот|пес)/ |
4. Решаем реальные задачи на Node.js
Рассмотрим три практические задачи, которые часто встречаются в разработке.
4.1 Валидация email
function validateEmail(email) {
const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
return regex.test(email);
}
console.log(validateEmail('test@domain