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

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

@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 значение.

लाइव एडिटर
परिणाम
SyntaxError: Unexpected token (1:8)
1 : return ()
            ^

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

Якоря#

anchor

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

लाइव एडिटर
परिणाम
SyntaxError: Unexpected token (1:8)
1 : return ()
            ^

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

Флаги#

Flag

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

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

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

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

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

लाइव एडिटर
परिणाम
SyntaxError: Unexpected token (1:8)
1 : return ()
            ^

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

Итого#

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

Проблемы?#

Problem

Пишите в Discord или телеграмм чат, а также подписывайтесь на наши новости s

Вопросы#

Question

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

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

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

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

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

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

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

Sumerian school

Ссылки#

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

Contributors ✨#

Thanks goes to these wonderful people (emoji key):


IIo3iTiv

📖

Dmitriy Vasilev

💵

Resoner2005

🐛 🎨 🖋

Navernoss

🖋 🐛 🎨

Become a Patron!