В этом уроке мы разберем, что такое модификаторы в регулярных выражениях. Вы узнаете, как и для чего они могут использоваться. Модификаторы в JavaScript применяются по-другому — не так, как показано в примерах. Поэтому для экспериментов с ними используйте PCRE.
В примере ниже регулярное выражение соответствует одной подстроке:
/(?:t.)-(?:t.)
/
ta-tu
ta-t
Tu-tu tu-T
Здесь сопоставляются две группы символов через дефис ta-tu
, каждая из которых соответствует условию «t
и любой символ». Остальные символы из строки не проходят сопоставление:
T
не находится, поскольку в выражении символ t
указан в нижнем регистреМы можем минимально изменить выражение таким образом, чтобы оно включало другие подстроки из примера. Для этого воспользуемся модификатором.
Модификаторы — это символы, которые указываются после знака ?
в группе символов регулярного выражения и меняют их поведение.
Если после ?
мы поставим i
, то включим режим игнорирования регистра. Мы получим сопоставление еще одной подстроки, но уже не с t
в нижнем регистре, а с T
в верхнем:
/(?i:t.)-(?:t.)
/
ta-tu
ta-t
Tu-tu
tu-T
Если мы сделаем так, что вторая часть подстроки после дефиса Tu-tu
будет также с большой буквы, то сопоставления по ней не будет. Так произойдет, потому что модификатор действует только в рамках группы, где он определен:
/(?i:t.)-(?:t.)
/
ta-tu
ta-t
Tu-Tu tu-T
Поэтому давайте продублируем модификатор i
во второй группе и получим сопоставление строки Tu-Tu
:
/(?i:t.)-(?i:t.)
/
ta-tu
ta-t
Tu-Tu
tu-T
Такая запись получается более коротким вариантом его аналога:
(?:[tT].)-(?:[tT].)
Модификаторы можно выносить и в отдельные группы:
/(?i)(t.)-(?i)(t.)
/
ta-tu
ta-t
Tu-Tu
tu-T
Но в этом случае будет выделена память под четыре группы совпадений.
Рассмотрим еще один интересный модификатор s
. Он делает так, что точка начинает включать в себя перевод строки и возврат каретки. Нам уже известно, что точка по умолчанию их не включает — мы могли убедиться в этом в самом начале урока.
После ta-t
и tu-T
следует перевод строки, поэтому эти подстроки не сопоставляются. Укажем модификатор s
во второй группе, и теперь у нас совпадут все подстроки:
/(?i:t.)-(?si:t.)
/
ta-tu ta-t
Tu-Tu tu-T
Модификаторы могут быть отключены. Для этого достаточно указать перед ними -
. Давайте добавим -
в первую группу и посмотрим на наш пример:
/(?-i:t.)-(?si:t.)
/
ta-tu ta-t
Tu-Tu tu-T
Активные и отключенные модификаторы можно комбинировать. Мы можем добавить модификатор s
и отменить i
и m
:
/(?s-im:t.)-(?si:t.)
/
ta-tu ta-t
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт