Зарегистрируйтесь, чтобы продолжить обучение

Модификаторы Регулярные выражения (Regexp)

В этом уроке мы разберем, что такое модификаторы в регулярных выражениях. Вы узнаете, как и для чего они могут использоваться. Модификаторы в 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

Tu-Tu tu-T



Дополнительные материалы

  1. Modifiers

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 26 декабря
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 26 декабря
профессия
от 25 000 ₸ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 26 декабря
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 26 декабря
профессия
от 39 525 ₸ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 26 декабря
профессия
от 25 000 ₸ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Автоматизированное тестирование веб-приложений на JavaScript
8 месяцев
c опытом
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»