#
RegExp
TODO: Добавить ссылки на методы
Регулярные выражения (Regular Expressions) в JavaScript - это мощный инструмент в JavaScript, позволяющий выполнять сложные операции поиска и замены в строках.
В JavaScript, регулярные выражения представлены объектом RegExp, и они могут быть использованы для выполнения разнообразных операций на строках.
#
Основные аспекты работы с RegExp:
Создание регулярного выражения:
Литерал регулярного выражения: /pattern/flags, где pattern - это сам шаблон, а flags - флаги:
Флаги:
g- Глобальный поиск:- Этот флаг указывает, что поиск должен осуществляться для всех соответствий в строке, а не только для первого. Если этот флаг не установлен, поиск будет остановлен после первого соответствия.
- Пример:
/pattern/g
i- Игнорирование регистра:- Флаг
iуказывает, что поиск должен быть регистро-независимым. Это значит, что символы верхнего и нижнего регистра будут считаться одинаковыми. - Пример:
/pattern/i
- Флаг
m- Многострочный режим:- Флаг
mпозволяет проводить поиск по множеству строк. Это означает, что^и$будут соответствовать началу и концу каждой строки, а не только всей строке. - Пример:
/pattern/m
- Флаг
u- Юникодный режим:- Флаг
uвключает полную поддержку Юникода, позволяя работать с символами Юникода в регулярных выражениях. Пример:/pattern/u
- Флаг
s- Режим однострочного символа.:- Флаг
sделает символ.соответствующим любому символу, включая символ новой строки (\n). - Пример:
/pattern/s
- Флаг
y- Строгий режим сопоставления:- Флаг
yуказывает, что сопоставление должно начинаться с позиции последнего сопоставления. Этот флаг полезен при выполнении многократных сопоставлений в одной и той же строке. - Пример:
/pattern/y
- Флаг
d- Режим цифрового сопоставления:- Флаг
dпозволяет использовать расширенный синтаксис для цифр в регулярных выражениях. - Пример:
/pattern/d
- Флаг
x- Режим игнорирования пробелов:- Флаг x позволяет добавлять пробелы и комментарии в регулярное выражение, что делает его более читаемым.
- Пример:
/pattern/x
Эти флаги могут комбинироваться для достижения желаемого поведения регулярного выражения в JavaScript. Например, регулярное выражение с флагами /pattern/gi будет искать все глобальные совпадения, игнорируя регистр.
Использование конструктора: new RegExp("pattern", "flags").
- Простой поиск:
- Метод
test()проверяет, есть ли соответствие шаблону в строке и возвращает true или false. - Метод
exec()выполняет поиск и возвращает информацию о первом соответствии, если оно найдено.
- Метод
- Поиск и замена:
- Метод
match()на строке выполняет поиск соответствий шаблону и возвращает массив с результатами. - Метод
replace()позволяет заменить соответствия шаблону на другую строку. - Методы
split()иsearch()также могут использовать регулярные выражения для разделения строк и поиска позиции соответствия.
- Метод
- Специальные символы: В регулярных выражениях есть специальные символы, такие как:
.- соответствует любому символу+- 1 или более повторений?- 0 или 1 повторение[]- набор символов|- логическое "или" и др.
- Группировка и обратные ссылки:
- Скобки
()позволяют группировать части шаблона. - Обратные ссылки, такие как
\1, могут использоваться для ссылки на результаты из групп.
- Скобки
#
Примеры использования RegExp:
Поиск электронной почты:
const emailPattern = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/;
const email = "example@mail.com";
console.log(emailPattern.test(email)); // true
Поиск даты:
const datePattern = /(\d{2})\.(\d{2})\.(\d{4})/;
const date = "20.10.2023";
const match = date.match(datePattern);
console.log(match); // ['20.10.2023', '20', '10', '2023']
Удаление лишних пробелов:
const str = "This is a test string.";
const newStr = str.replace(/\s+/g, " ");
console.log(newStr); // 'This is a test string.'
Валидация пароля:
const passwordPattern =
/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
const password = "Abc12345!";
console.log(passwordPattern.test(password)); // true
Удаление HTML-тегов:
const htmlString = "<p>This is a <strong>bold</strong> text.</p>";
const strippedString = htmlString.replace(/<[^>]+>/g, "");
console.log(strippedString); // 'This is a bold text.'
Подсчет числа слов в строке:
const str = "Hello, this is a test string!";
const wordCount = (str.match(/\b\w+\b/g) || []).length;
console.log(wordCount); // 6
#
Заключение
RegExp используются для сопоставления текста с шаблоном и могут быть полезны для валидации данных, поиска и замены подстрок, парсинга и других текстовых манипуляций.