Шаблоны и флаги регулярных выражений JavaScript
Введение в шаблоны и флаги JavaScript
Регулярные выражения (regex) — это важные инструменты в JavaScript для поиска по шаблону и проверки данных. Это подробное руководство углубит ваше понимание шаблонов и флагов regex, а также поможет улучшить навыки работы с JavaScript.
Список распространённых шаблонов
Вот некоторые часто используемые шаблоны:
\w: Соответствует любому символу слова (буквенно-цифровому символу плюс подчёркивание). Эквивалентно[a-zA-Z0-9_].\W: Соответствует любому несловесному символу. Эквивалентно[^a-zA-Z0-9_].\d: Соответствует любой цифре. Эквивалентно[0-9].\D: Соответствует любому нецифровому символу. Эквивалентно[^0-9].\s: Соответствует любому пробельному символу (пробелы, табуляции, переносы строк).\S: Соответствует любому непустому пробельному символу. Эквивалентно[^\s]..: Соответствует любому символу, кроме новой строки (\n).^: Указывает позицию в начале строки.$: Указывает позицию в конце строки.\b: Соответствует границе слова (позиции между символом слова и несловесным символом).\B: Соответствует позиции, которая не является границей слова.\t: Соответствует символу табуляции.\n: Соответствует символу новой строки.\r: Соответствует символу возврата каретки.\\: Соответствует буквальному обратному слэшу.\f: Соответствует символу перевода страницы.\v: Соответствует символу вертикальной табуляции.[abc]: Соответствует любому одному символу из указанных в квадратных скобках.[^abc]: Соответствует любому одному символу, не входящему в квадратные скобки.a|b: Соответствует либо a, либо b.(abc): Соответствует точной последовательности abc.a?: Соответствует нулю или одному вхождению.a*: Соответствует нулю или более вхождениям.a+: Соответствует одному или более вхождениям.a{3}: Соответствует ровно 3 вхождениям a.a{3,}: Соответствует 3 или более вхождениям a.a{3,5}: Соответствует от 3 до 5 вхождений a.(?i): Не поддерживается в JavaScript. Вместо этого используйте флагi.(?:...): Некаптурирующая группа.(?=...): Положительная проверка вперёд.(?!...): Отрицательная проверка вперёд.(?<=...): Положительная проверка назад.(?<!...): Отрицательная проверка назад.
Понимание шаблонов
Шаблон regex заключается между слэшами (/pattern/flags).
Пример: /H.llo/g
- Шаблон:
H.lloсоответствует любой строке, начинающейся с 'H', за которой следует любой одиночный символ (.), и заканчивающейся на 'llo'. - Флаг:
gуказывает на глобальный поиск. - Квантификатор:
.соответствует ровно одному символу.
Шаблоны в регулярных выражениях используются для определения строки, которую вы ищете. Эти шаблоны могут включать различные символы, классы символов и специальные символы.
Теперь давайте рассмотрим несколько примеров:
Пример 1:
- Шаблон:
\d+соответствует одному или нескольким цифровым символам (\d+). - Флаг:
gуказывает на глобальный поиск. - Квантификатор:
+соответствует одному или нескольким вхождениям предыдущего элемента (\d).
Пример 2:
- Шаблон:
\D+соответствует одному или нескольким нецифровым символам (\D+). - Флаг:
gуказывает на глобальный поиск. - Квантификатор:
+соответствует одному или нескольким вхождениям предыдущего элемента (\D).
Квантификаторы
Квантификаторы определяют, сколько экземпляров символа, группы или класса символов должно присутствовать во входных данных, чтобы было найдено совпадение. Вот некоторые часто используемые квантификаторы с примерами:
+- Соответствует одному или нескольким вхождениям предыдущего элемента.
Этот шаблон соответствует последовательностям из одной или нескольких цифр.
*- Соответствует нулю или более вхождениям предыдущего элемента.
Этот шаблон соответствует последовательностям из нуля или более символов слова.
?- Соответствует нулю или одному вхождению предыдущего элемента.
Этот шаблон соответствует 'color' или 'colour'.
{n}- Соответствует ровно n вхождениям предыдущего элемента.
Этот шаблон соответствует ровно трём цифрам.
{n,}- Соответствует n или более вхождениям предыдущего элемента.
Этот шаблон соответствует последовательностям из двух или более цифр.
{n,m}- Соответствует от n до m вхождений предыдущего элемента.
Этот шаблон соответствует последовательностям из двух до трёх цифр.
Флаги
Флаги — это необязательные параметры, которые позволяют выполнять глобальный поиск, поиск без учёта регистра и многое другое. Вот некоторые часто используемые флаги с примерами:
g- Глобальный поиск.
Этот флаг позволяет находить все совпадения в строке.
i- Поиск без учёта регистра.
Этот флаг делает поиск нечувствительным к регистру.
m- Многострочный поиск.
Этот флаг позволяет ^ и $ совпадать с началом и концом каждой строки в строке.
s- Позволяет.совпадать с символами новой строки (также известен как флаг dotAll).
Этот флаг позволяет точке . также совпадать с символами новой строки.
u- "Unicode"; рассматривает шаблон как последовательность кодовых точек Unicode.
Этот флаг включает полное сопоставление Unicode.
y- "Sticky"; совпадает только с индекса, указанного свойством lastIndex этого регулярного выражения в целевой строке.
Этот флаг позволяет начинать поиск с определённого индекса в строке.
Проверка шаблонов: regexp.test()
Метод test() проверяет, существует ли шаблон в строке, возвращая true или false.
Этот код проверяет наличие "world" в строке.
Замена текста: str.replace()
Функция replace() позволяет изменять строки, заменяя их части новым текстом.
Этот код заменяет "morning" на "evening".
Замена всех вхождений: str.replaceAll()
Метод replaceAll() заменяет все вхождения шаблона новой строкой.
Этот код заменяет каждую "a" на "o".
Разделение текста: str.split()
Метод split() разделяет строку на массив подстрок на основе шаблона.
Этот код разделяет строку по каждой запятой.
Поиск текста: str.match()
Метод match() извлекает совпадения шаблона в строке, что полезно для получения конкретных данных.
Этот код находит все числа в тексте.
Синтаксис regex в JavaScript
Регулярные выражения используют специальные символы для определения шаблонов. Вот подробный пример с использованием нескольких элементов синтаксиса regex:
Этот шаблон regex разбирает URL на его компоненты:
^(\w+): Соответствует любому символу слова (эквивалентно[a-zA-Z0-9_]) в начале, представляя протокол.:\/\/: Соответствует буквальному "😕/".([\w.-]+): Соответствует одному или нескольким символам слова, точкам или дефисам, представляя домен.\/(\S*)$: Соответствует слэшу, за которым следуют любые непустые пробельные символы до конца, представляя путь.
Подробнее:
Этот код JavaScript проверяет, соответствует ли веб-адрес подробному шаблону.
- Настройка шаблона: Шаблон структурирован так, чтобы захватывать разные компоненты веб-адреса: протокол (например, "https"), доменное имя (например, "www.w3docs.com"), и путь (всё после домена).
- Проверка веб-адреса: Код проверяет "https://www.w3docs.com/pathname/?search=test" на соответствие этому шаблону.
- Показ результата: Если веб-адрес соответствует шаблону, код выводит части, которые соответствуют шаблону.
Ожидаемый результат: Вывод представляет собой массив со следующими элементами:
- Полный веб-адрес: "https://www.w3docs.com/pathname/?search=test".
- Используемый протокол: "https".
- Доменное имя: "www.w3docs.com".
- Путь и строка запроса: "pathname/?search=test".
Практические применения шаблонов и флагов
Regex используется в различных сценариях для улучшения JavaScript-приложений:
Проверка пользовательского ввода
Regex помогает убедиться, что вводимые пользователем данные соответствуют определённым критериям, что крайне важно для качества данных и безопасности.
Этот код проверяет, состоит ли имя пользователя из 3–16 буквенно-цифровых символов или подчёркиваний.
Извлечение информации
Regex может эффективно извлекать конкретную информацию из больших текстов или наборов данных.
Этот код JavaScript извлекает конкретный фрагмент информации из текстовой строки.
- Определение текста: Код начинается со строки
data, которая содержит сведения о заказе, включая идентификатор заказа и дату. - Настройка шаблона: Он использует шаблон (
idPattern) для поиска фразы "Order ID:", за которой следует последовательность цифр. Этот шаблон предназначен для захвата числовой части сразу после "Order ID:". - Извлечение идентификатора заказа: Код ищет в строке
dataсовпадение сidPattern. Когда совпадение найдено, он извлекает только часть с цифрами (игнорируя текст "Order ID:"), которая и представляет идентификатор заказа. - Отображение результата: Затем он выводит этот идентификатор заказа в консоль.
INFO
Всегда проверяйте свои шаблоны regex с помощью таких инструментов, как regex101.com, чтобы убедиться в точности и эффективности перед внедрением их в код.
Заключение
Овладение шаблонами regex и флагами в JavaScript имеет решающее значение для эффективной работы с преобразованием текста, проверкой данных и операциями поиска. Эти инструменты делают ваши JavaScript-приложения более надёжными, эффективными и удобными для пользователей. Изучайте различные шаблоны и флаги, чтобы повысить уровень своих навыков программирования и производительность приложений.
Практика
What are the properties of regular expressions in JavaScript as described in the provided URL?