मुख्य कंटेंट तक स्किप करें

Регулярные выражения

@serverSerrverlesskiy

Регулярные выражения (англ. regular expressions) — формальный язык поиска и осуществления манипуляций со строками в тексте , основанный на использовании метасимволов.

Регулярные выражения позволяют:

  • Искать текст в строке
  • Заменять подстроки в строке
  • Извлекать информацию из строки

search

JavaScript, наряду с Perl, это один из языков программирования в котором поддержка регулярных выражений встроена непосредственно в язык .

Сложность использования

the complexity of using

Недостаток регулярных выражений в том, что часто они выглядят странно и даже пугающе. Особенно это касается более сложных шаблонов.

let regExp = /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/

Определение регулярных выражения

search

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

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

let regExp = /шаблон/

Если вы решили создавать регулярные выражения при помощи литералов, то стоит учитывать, что такой метод создания не допускает динамическое изменение задаваемых значений. Происходит это из-за того, что литералы регулярных выражения вызывают предварительную компиляцию при анализе скрипта.

Использование

pressing the button

Использование регулярных выражений рассмотрим на примере:

let regExp = /banana/

Этим кодом мы создали простое регулярное выражение, которое ищет строку banana. Для тестирования регулярного выражения можно использовать метод .test(string), результатом работы метода является boolean значение.

लाइव एडिटर
परिणाम
Loading...

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

Якоря

anchor

Якоря привязывают шаблон к началу или концу строки. Для привязки к началу строки используется - ^, а к концу - $.

लाइव एडिटर
परिणाम
Loading...

Используя такой шаблон /banana/ вы будете искать banana во всей строке. Если нужно проверить на полное совпадение строки с шаблоном нужно использовать якоря /^banana$/. Метод .test() вернёт true только в том случае, если вся строка это banana.

Флаги

Flag

Флаги используются для расширения осуществляемого регулярными выражениями поиска.

  • g - при поиске ищет все совпадения;
  • i - поиск не зависит от регистра [Z-z];
  • m - многострочный режим;
  • s - включает режим dotall, при котором точка . может соответствовать символу перевода строки;
  • y - выполняет поиск начиная с символа, который находится на позиции свойства lastindex текущего регулярного выражения;
  • u - включает поддержку Unicode.

Использование флагов при разных способах создания шаблона регулярного выражения

let regExp = /шаблон/флаг // prettier-ignore

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

लाइव एडिटर
परिणाम
Loading...

Попробуйте убрать флаг i из примера.

Итого

Тема очень обширная и нечасто используемая нами в разработке, поэтому если интересно, то подробней можно познакомиться с ней здесь, здесь и здесь.

EnglishMoji!

Проблемы?

Problem

Пишите в Telegram или ВКонтакте, а также подписывайтесь на наши новости s

Вопросы

Question

Для чего нужны регулярные выражения?

  1. Cоздание шаблонов
  2. Манипуляции со строками
  3. Редактирования строк

Какой символ используется для литерального создания регулярного выражения?

  1. Слеш /
  2. Обратный слеш \
  3. Квадратные скобки []

В каком способе создания регулярного выражения не допускается дальнейшее динамическое изменение задаваемых значений?

  1. В литеральном
  2. В конструкторе
  3. При любом способе динамическое изменение допустимо

Для того чтобы понять насколько вы усвоили этот урок пройдите тест в мобильном приложении в нашей школы по этой теме.

EnglishMoji!

Ссылки

  1. Learn JavaScript
  2. MDN Web Docs
  3. JS RegExp

Contributors ✨

Thanks goes to these wonderful people (emoji key):


IIo3iTiv


Dmitriy Vasilev

💵

Resoner2005

🐛 🎨 🖋

Navernoss

🖋 🐛 🎨