Регулярные выражения
Регулярные выражения (англ. regular expressions) — формальный язык поиска и осуществления манипуляций со строками в тексте , основанный на использовании метасимволов.
Регулярные выражения позволяют:
- Искать текст в строке
- Заменять подстроки в строке
- Извлекать информацию из строки
JavaScript, наряду с Perl, это один из языков программирования в котором поддержка регулярных выражений встроена непосредственно в язык .
Сложность использования
Недостаток регулярных выражений в том, что часто они выглядят странно и даже пугающе. Особенно это касается более сложных шаблонов.
let regExp = /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
Определение регулярных выражения
Определение регулярного выражения, это создание шаблона, на основе которого будет происходить работа со строками. В JavaScript регулярные выражения - это объект, который может быть определён двумя способами.
- Литерал
- Конструкция
Определение регулярных выражений с использованием литералов. Для регулярных выражений литералами выступают слеши / ... /
, они играют ту же роль, что и скобки ' ... '
при создании строк.
let regExp = /шаблон/
Если вы решили создавать регулярные выражения при помощи литералов, то стоит учитывать, что такой метод создания не допускает динамическое изменение задаваемых значений. Происходит это из-за того, что литералы регулярных выражения вызывают предварительную компиляцию при анализе скрипта.
Определение регулярных выражений с использованием конструктора.
let regExp = new RegExp('шаблон')
Компиляция регулярного выражения созданного с использованием конструктора происходит в момент выполнения скрипта. Такой способ создания стоит использовать, если ваше регулярное выражение создаётся из динамически сгенерированной строки.
Использование
Использование регулярных выражений рассмотрим на примере:
let regExp = /banana/
Этим кодом мы создали простое регулярное выражение, которое ищет строку banana
. Для тестирования регулярного выражения можно использовать метод .test(string)
, результатом работы метода является boolean
значение.
В примере регулярное выражение ищет подстроку banana
в строке str
.
Якоря
Якоря привязывают шаблон к началу или концу строки. Для привязки к началу строки используется - ^
, а к концу - $
.
Используя такой шаблон /banana/
вы будете искать banana
во всей строке. Если нужно проверить на полное совпадение строки с шаблоном нужно использовать якоря /^banana$/
. Метод .test()
вернёт true
только в том случае, если вся строка это banana
.
Флаги
Флаги используются для расширения осуществляемого регулярными выражениями поиска.
g
- при поиске ищет все совпадения;i
- поиск не зависит от регистра[Z-z]
;m
- многострочный режим;s
- включает режим dotall, при котором точка.
может соответствовать символу перевода строки;y
- выполняет поиск начиная с символа, который находится на позиции свойства lastindex текущего регулярного выражения;u
- включает поддержку Unicode.
Использование флагов при разных способах создания шаблона регулярного выражения
- Литерал
- Конструкция
let regExp = /шаблон/флаг // prettier-ignore
Обратите внимание, что флаги являются неотъемлемой частью регулярного выражения. Флаги не могут быть добавлены или удалены позднее. Также флаги можно комбинировать.
Попробуйте убрать флаг i
из примера.
let regExp = new RegExp('шаблон', 'флаг')
Обратите внимание, что флаги являются неотъемлемой частью регулярного выражения. Флаги не могут быть добавлены или удалены позднее. Также флаги можно комбинировать.
Попробуйте убрать флаг i
из примера. Теперь поиск зависит от регистра.
Итого
Тема очень обширная и нечасто используемая нами в разработке, поэтому если интересно, то подробней можно познакомиться с ней здесь, здесь и здесь.
Проблемы?
Пишите в Telegram или ВКонтакте, а также подписывайтесь на наши новости s
Вопросы
Для чего нужны регулярные выражения?
- Cоздание шаблонов
- Манипуляции со строками
- Редактирования строк
Какой символ используется для литерального создания регулярного выражения?
- Слеш
/
- Обратный слеш
\
- Квадратные скобки
[]
В каком способе создания регулярного выражения не допускается дальнейшее динамическое изменение задаваемых значений?
- В литеральном
- В конструкторе
- При любом способе динамическое изменение допустимо
Для того чтобы понять насколько вы усвоили этот урок пройдите тест в мобильном приложении в нашей школы по этой теме.
Ссылки
Contributors ✨
Thanks goes to these wonderful people (emoji key):
IIo3iTiv | Dmitriy Vasilev 💵 | Resoner2005 🐛 🎨 🖋 | Navernoss 🖋 🐛 🎨 |