# 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 используются для сопоставления текста с шаблоном и могут быть полезны для валидации данных, поиска и замены подстрок, парсинга и других текстовых манипуляций.