В этом уроке мы рассмотрим, как с помощью регулярных выражений можно находить похожие сочетания символов.
Представим, что нам нужно найти любую из двух подстрок: gray
или grow
. Воспользуемся механизмом, который называется альтернатива — укажем первый возможный вариант и через вертикальную черточку — второй. Так мы получим следующее сопоставление:
/gray|grow
/
gray
grow
grey
Это же условие можно записать немного короче. Поскольку у этих подстрок есть общая часть, укажем символы gr
и дальше, используя группировку, добавим альтернативу:
/gr(ay|ow)
/
gray
grow
grey
Здесь очень важна группировка. Если мы ее уберем, альтернативой gray
станет ow
:
/gray|ow
/
gray
grow
grey
Ниже еще один пример использования альтернативы. В английском языке есть слово gray
/grey
. Оно звучит одинаково, но в британском и американском вариантах пишется по-разному. Чтобы не упустить в тексте ни один из вариантов, мы можем использовать лаконичную альтернативу:
/gr(a|e)y
/
gray
grow grey
Еще мы можем упростить получившееся выражение, поскольку в альтернативе используются одиночные символы. Укажем символьный класс, который состоит из символов a
и e
:
/gr[ae]y
/
gray
grow grey
В этом случае механизм сопоставления намного эффективнее работает с символьными классами, тем более — одиночными.
Символьный класс и альтернатива
В регулярных выражениях символьные классы обычно работают быстрее, чем альтернатива, особенно когда речь идет о простых случаях. Вот почему:
- Простота: Символьный класс позволяет проверить один символ сразу, а альтернатива требует проверять каждый вариант по отдельности, что занимает больше времени.
- Оптимизация: Многие программы, которые обрабатывают регулярные выражения, лучше справляются с символьными классами, так как они могут быстро определить, есть ли символ в классе. Альтернатива требует больше шагов, чтобы проверить каждый вариант.
- Сложность: Если много альтернатив, это может замедлить процесс, потому что программа должна проверять каждую из них по очереди.
Если можно использовать символьный класс, это будет быстрее, чем использовать альтернативу. Альтернатива полезна в тех случаях, когда нужно искать разные строки или шаблоны, которые не могут быть объединены в символьный класс. Например, если нужно найти "cat" или "dog", то используем cat|dog
.
/cat|dog
/
cat
and dog
are pets.
Альтернатива позволяет комбинировать более сложные выражения. Например, можно использовать a|b|c\d
для поиска "a", "b" или "c" с последующей цифрой.
/(a|b|c\d)
/
Choose a
, b
, or c3
for your answer.
Альтернатива дает больше возможностей для создания сложных регулярных выражений, когда нужно учитывать разные варианты, которые не могут быть выражены через символьные классы.
/([a-zA-Z0-9._%+-]+@(gmail\.com|yahoo\.com|hotmail\.com))
/
Contact me at user@gmail.com
, example@yahoo.com
, or test@hotmail.com
.
Таким образом, альтернатива нужна для более сложных случаев, когда нужно искать разные строки или шаблоны, которые не могут быть объединены в один класс символов.

Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.