Квантификаторы регулярных выражений и символ новой строки в JavaScript
Руководство по квантификаторам в регулярных выражениях JavaScript: *, +, ?, {n}, {n,}, {n,m} и символ \n с практическими примерами.
В этом руководстве мы рассмотрим мощные квантификаторы, которые позволяют управлять тем, сколько раз шаблон должен встречаться при поиске в тексте. Давайте разберёмся в возможностях квантификаторов регулярных выражений и сделаем ваш код более эффективным!
Квантификаторы в регулярных выражениях JavaScript
Квантификаторы в регулярных выражениях — это мощные инструменты, позволяющие указать, сколько раз символ, группа или класс символов должны встречаться во входной строке для совпадения. Вот краткий обзор наиболее часто используемых квантификаторов в JavaScript:
*(звёздочка): совпадает с 0 или более повторениями предшествующего элемента.+(плюс): совпадает с 1 или более повторениями предшествующего элемента.?(вопросительный знак): совпадает с 0 или 1 повторением предшествующего элемента.{n}: совпадает ровно с n вхождениями предшествующего элемента.{n,}: совпадает минимум с n вхождениями предшествующего элемента.{n,m}: совпадает от n до m вхождений предшествующего элемента включительно.
Квантификатор всегда применяется только к одному элементу непосредственно перед ним — одному символу, escape-последовательности вроде \d, классу символов вроде [a-z] или группе вроде (abc). Он никогда не применяется ко всему шаблону целиком.
Практический пример: квантификатор *
В этом примере /A*/i совпадает с нулём или более вхождениями 'A' (без учёта регистра), захватывая последовательность "Aaaaaa" в начале строки. Звёздочка допускает совпадение даже при отсутствии 'A'.
Практический пример: квантификатор +
Выражение \d+ находит одну или более цифр в тексте. В результате возвращаются 123 и 456 как отдельные совпадения, демонстрируя полезность + для захвата целых чисел.
Практический пример: квантификатор ?
Шаблон регулярного выражения /colou?r/g совпадает как с "color", так и с "colour". Квантификатор ? делает предшествующую 'u' необязательной, позволяя шаблону совпадать со словом независимо от наличия 'u'. Флаг g обеспечивает нахождение всех вхождений в тексте.
Практический пример: квантификатор {n}
\b\d{4}\b совпадает с последовательностью ровно из четырёх цифр, распознавая 2022 и 1999 как годы.
Всегда обращайте внимание на эффективность ваших регулярных выражений. Неэффективные шаблоны могут снижать производительность, особенно при работе с большими объёмами данных. Оптимизируйте регулярные выражения: избегайте лишних квантификаторов и используйте «ленивые» квантификаторы там, где это уместно.
Практический пример: квантификатор {n,}
Шаблон \b[a-zA-Z]{5,}\b совпадает со словами, состоящими минимум из пяти букв. Он захватит fantastic и incredible.
Практический пример: квантификатор {n,m}
Шаблон регулярного выражения \b[a-zA-Z]{3,6}\b предназначен для совпадения со словами от 3 до 6 букв, ограниченными границами слов для гарантии захвата только полных слов. Регулярное выражение захватит "See", "the", "big", "tiny", "ant", "and", "old" и "tree". "elephant" не совпадает, поскольку превышает 6 букв.
Практический пример: символ \n
Escape-последовательность \n представляет символ новой строки. В регулярном выражении она совпадает с реальным переносом строки в строке. Шаблон /line\n/g находит слово "line", сразу за которым следует перенос строки, захватывая оба вхождения в примере.
Краткие квантификаторы — это просто {n,m}
Символы *, + и ? — не что иное, как удобные сокращения формы {n,m}. Знание эквивалентностей помогает лучше их запомнить:
*то же самое, что{0,}— ноль или более.+то же самое, что{1,}— один или более.?то же самое, что{0,1}— ноль или один.
Оба шаблона в каждой паре дают одинаковый результат, подтверждая, что символы и форма с фигурными скобками взаимозаменяемы.
Квантификаторы «жадны» по умолчанию
По умолчанию квантификатор является жадным: он захватывает как можно большую часть строки, при этом всё же допуская общее совпадение шаблона. Именно поэтому шаблон вроде <.+> поглощает всё от первого < до последнего >, а не до первого >.
Чтобы остановиться на первом >, добавьте ? после квантификатора — это сделает его ленивым (нежадным): <.+?>. Ленивые квантификаторы подробно рассмотрены в разделе Жадные и ленивые квантификаторы.
Применение квантификаторов к группам и классам символов
Квантификатор повторяет только один токен перед ним. Чтобы повторить несколько символов как единое целое, оберните их в захватывающую группу с помощью (...). Чтобы повторить любой из набора символов, поставьте квантификатор после класса символов [...].
Первый шаблон повторяет всю последовательность (abc) дважды; без группы abc{2} повторял бы только конечный символ c. Пример с шестнадцатеричным кодом повторяет класс [0-9a-f] шесть раз, а пример с номером телефона сочетает повторяющуюся группу с {n} для \d.
Чтобы управлять чувствительностью к регистру или охватом нескольких строк, комбинируйте квантификаторы с соответствующими флагами, описанными в разделе Шаблоны и флаги.
Заключение
Понимание и эффективное использование квантификаторов и символа \n в JavaScript значительно расширяют возможности работы с текстом в веб-разработке. Эти инструменты обеспечивают мощное сопоставление с шаблоном и извлечение данных, делая ваш JavaScript-код более эффективным, а приложения — более динамичными и отзывчивыми.