JavaScript Регулярные Выражения и Объект RegExp
Здравствуйте, ambitные программисты! Сегодня мы отправимся в увлекательное путешествие в мир регулярных выражений (RegEx) в JavaScript. Не волнуйтесь, если вы никогда раньше не слышали о RegEx — мы начнем с самых азов и будем двигаться往上. К концу этого руководства вы будете использовать силу RegEx как профи!

Что такое Регулярные Выражения?
Регулярные выражения, часто сокращаемые до RegEx, — это мощные инструменты для поиска и манипулирования строками. Представьте их как особый язык для описания шаблонов в тексте. Это как швейцарский армейский нож для работы со строками — универсальный и невероятно полезный!
Давайте начнем с простого примера:
let pattern = /hello/;
let text = "Hello, world!";
console.log(pattern.test(text)); // Вывод: false
В этом примере /hello/ — это наш шаблон RegEx, и мы проверяем, соответствует ли он тексту "Hello, world!". Результат false, так как RegEx по умолчанию чувствителен к регистру.
Объект RegExp
В JavaScript мы можем создавать шаблоны RegEx с помощью объекта RegExp. Вот как это делается:
let pattern1 = new RegExp("hello");
let pattern2 = /hello/;
console.log(pattern1.test("hello world")); // Вывод: true
console.log(pattern2.test("hello world")); // Вывод: true
Оба способа создания объекта RegExp эквивалентны. Литеральная нотация (/pattern/) используется чаще из-за своей простоты.
Модификаторы
Модификаторы позволяют нам изменять поведение шаблона RegEx. Давайте рассмотрим некоторые из распространенных модификаторов:
| Модификатор | Описание |
|---|---|
| i | Без учета регистра |
| g | Глобальный поиск (находит все совпадения, а не только первое) |
| m | Многострочный поиск |
Вот пример использования модификатора 'i':
let pattern = /hello/i;
let text = "Hello, World!";
console.log(pattern.test(text)); // Вывод: true
Теперь наш шаблон соответствует "Hello" независимо от регистра!
Скобки
Скобки в RegEx используются для определения набора или диапазона символов для поиска:
| Скобка | Описание |
|---|---|
| [abc] | Совпадает с любым символом в скобках |
| [^abc] | Совпадает с любым символом не в скобках |
| [0-9] | Совпадает с любым digitом от 0 до 9 |
| [a-z] | Совпадает с любым малым字母ом |
Давайте рассмотрим пример:
let pattern = /[aeiou]/;
console.log(pattern.test("hello")); // Вывод: true
console.log(pattern.test("why")); // Вывод: false
Этот шаблон совпадает с любым гласным. Он находит совпадение в "hello", но не в "why".
Квантители
Квантители указывают, сколько копий символа, группы или класса символов должно быть presente для нахождения совпадения.
| Квантитель | Описание |
|---|---|
| * | 0 или более occurrences |
| + | 1 или более occurrences |
| ? | 0 или 1 occurrence |
| {n} | Exactly n occurrences |
| {n,} | n или более occurrences |
| {n,m} | Между n и m occurrences |
Вот забавный пример:
let pattern = /ba+/;
console.log(pattern.test("b")); // Вывод: false
console.log(pattern.test("ba")); // Вывод: true
console.log(pattern.test("baaaa")); // Вывод: true
Этот шаблон совпадает с "ba" и любым количеством дополнительных "a". Это как блеяние овцы: "baaaa"!
Literals Characters
Literals characters в RegEx просто совпадают с собой. Например, /hello/ совпадает с exact sequence of characters "hello".
let pattern = /hello world/;
console.log(pattern.test("hello world")); // Вывод: true
console.log(pattern.test("hello earth")); // Вывод: false
Metacharacters
Metacharacters имеют special meanings в RegEx:
| Metacharacter | Description |
|---|---|
| . | Совпадает с любым одним символом |
| \d | Совпадает с любым digitом |
| \D | Совпадает с любым non-digit |
| \w | Совпадает с любым word character |
| \W | Совпадает с любым non-word character |
| \s | Совпадает с любым whitespace character |
| \S | Совпадает с любым non-whitespace character |
Давайте используем некоторые metacharacters:
let pattern = /\d{3}-\d{3}-\d{4}/;
console.log(pattern.test("123-456-7890")); // Вывод: true
console.log(pattern.test("abc-def-ghij")); // Вывод: false
Этот шаблон совпадает с типичным форматом US phone number.
RegExp Сvojstva
Объекты RegExp имеют несколько полезных свойств:
| Свойство | Описание |
|---|---|
| global | Whether the "g" flag is set |
| ignoreCase | Whether the "i" flag is set |
| multiline | Whether the "m" flag is set |
| source | Текст шаблона |
| lastIndex | The index at which to start the next match |
Вот как использовать эти свойства:
let pattern = /hello/gi;
console.log(pattern.global); // Вывод: true
console.log(pattern.ignoreCase); // Вывод: true
console.log(pattern.source); // Вывод: "hello"
RegExp Методы
Наконец, рассмотрим некоторые методы, которые мы можем использовать с объектами RegExp:
| Метод | Описание |
|---|---|
| exec() | Выполняет поиск совпадения в строке |
| test() | Проверяет наличие совпадения в строке |
| toString() | Возвращает строковое представление regexp |
Вот пример использования exec():
let pattern = /\d+/g;
let text = "I have 2 apples and 3 oranges.";
let match;
while ((match = pattern.exec(text)) !== null) {
console.log(`Found ${match[0]} at index ${match.index}`);
}
// Вывод:
// Found 2 at index 7
// Found 3 at index 23
Этот код находит все числа в тексте и сообщает их позиции.
И вот мы и рассмотрели основы регулярных выражений в JavaScript. Помните, что практика делает мастера. Попробуйте создать свои шаблоны и проверьте их. Скоро вы будете использовать RegEx для решения всех sorts of string manipulation problems с легкостью!
Счастливого кодирования, и пусть ваши регулярные выражения всегда находят совпадение!
Credits: Image by storyset
