W3docs

Квантификаторы регулярных выражений и символ новой строки в 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). Он никогда не применяется ко всему шаблону целиком.

Практический пример: квантификатор *

javascript— editable

В этом примере /A*/i совпадает с нулём или более вхождениями 'A' (без учёта регистра), захватывая последовательность "Aaaaaa" в начале строки. Звёздочка допускает совпадение даже при отсутствии 'A'.

Практический пример: квантификатор +

javascript— editable

Выражение \d+ находит одну или более цифр в тексте. В результате возвращаются 123 и 456 как отдельные совпадения, демонстрируя полезность + для захвата целых чисел.

Практический пример: квантификатор ?

javascript— editable

Шаблон регулярного выражения /colou?r/g совпадает как с "color", так и с "colour". Квантификатор ? делает предшествующую 'u' необязательной, позволяя шаблону совпадать со словом независимо от наличия 'u'. Флаг g обеспечивает нахождение всех вхождений в тексте.

Практический пример: квантификатор {n}

javascript— editable

\b\d{4}\b совпадает с последовательностью ровно из четырёх цифр, распознавая 2022 и 1999 как годы.

Информация

Всегда обращайте внимание на эффективность ваших регулярных выражений. Неэффективные шаблоны могут снижать производительность, особенно при работе с большими объёмами данных. Оптимизируйте регулярные выражения: избегайте лишних квантификаторов и используйте «ленивые» квантификаторы там, где это уместно.

Практический пример: квантификатор {n,}

javascript— editable

Шаблон \b[a-zA-Z]{5,}\b совпадает со словами, состоящими минимум из пяти букв. Он захватит fantastic и incredible.

Практический пример: квантификатор {n,m}

javascript— editable

Шаблон регулярного выражения \b[a-zA-Z]{3,6}\b предназначен для совпадения со словами от 3 до 6 букв, ограниченными границами слов для гарантии захвата только полных слов. Регулярное выражение захватит "See", "the", "big", "tiny", "ant", "and", "old" и "tree". "elephant" не совпадает, поскольку превышает 6 букв.

Практический пример: символ \n

javascript— editable

Escape-последовательность \n представляет символ новой строки. В регулярном выражении она совпадает с реальным переносом строки в строке. Шаблон /line\n/g находит слово "line", сразу за которым следует перенос строки, захватывая оба вхождения в примере.

Краткие квантификаторы — это просто {n,m}

Символы *, + и ? — не что иное, как удобные сокращения формы {n,m}. Знание эквивалентностей помогает лучше их запомнить:

  • * то же самое, что {0,} — ноль или более.
  • + то же самое, что {1,} — один или более.
  • ? то же самое, что {0,1} — ноль или один.
javascript— editable

Оба шаблона в каждой паре дают одинаковый результат, подтверждая, что символы и форма с фигурными скобками взаимозаменяемы.

Квантификаторы «жадны» по умолчанию

По умолчанию квантификатор является жадным: он захватывает как можно большую часть строки, при этом всё же допуская общее совпадение шаблона. Именно поэтому шаблон вроде <.+> поглощает всё от первого < до последнего >, а не до первого >.

javascript— editable

Чтобы остановиться на первом >, добавьте ? после квантификатора — это сделает его ленивым (нежадным): <.+?>. Ленивые квантификаторы подробно рассмотрены в разделе Жадные и ленивые квантификаторы.

Применение квантификаторов к группам и классам символов

Квантификатор повторяет только один токен перед ним. Чтобы повторить несколько символов как единое целое, оберните их в захватывающую группу с помощью (...). Чтобы повторить любой из набора символов, поставьте квантификатор после класса символов [...].

javascript— editable

Первый шаблон повторяет всю последовательность (abc) дважды; без группы abc{2} повторял бы только конечный символ c. Пример с шестнадцатеричным кодом повторяет класс [0-9a-f] шесть раз, а пример с номером телефона сочетает повторяющуюся группу с {n} для \d.

Чтобы управлять чувствительностью к регистру или охватом нескольких строк, комбинируйте квантификаторы с соответствующими флагами, описанными в разделе Шаблоны и флаги.

Заключение

Понимание и эффективное использование квантификаторов и символа \n в JavaScript значительно расширяют возможности работы с текстом в веб-разработке. Эти инструменты обеспечивают мощное сопоставление с шаблоном и извлечение данных, делая ваш JavaScript-код более эффективным, а приложения — более динамичными и отзывчивыми.

Практика

Практика
Что делает квантификатор '+' в регулярном выражении JavaScript?
Что делает квантификатор '+' в регулярном выражении JavaScript?
Was this page helpful?