Что такое регулярное выражение?

Регулярное выражение? RegExp? Когда я впервые услышал о регулярных выражениях, они казались слишком запутанными, чтобы пытаться понять. Мне казалось, что я читаю иероглифы. Я просто переместил их в раздел «Разберемся позже» в своей голове.

Хотя я до сих пор не могу претендовать на звание эксперта по регулярным выражениям, я попытаюсь объяснить, что именно такое регулярные выражения, в надежде, что я смогу облегчить понимание кем-то другим.

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

Мы каждый день используем шаблоны для поиска документов и даже не осознаем этого. Например, помните письмо, которое вы получили от любимого магазина с кодом купона на скидку 50%? Вы знаете, что читаете его, но не можете вспомнить, когда вы его получили. Вы можете пролистать все свои электронные письма, пока не найдете его, но на это ни у кого нет времени. Вместо этого вы просто вводите несколько букв магазина или адреса электронной почты в строку поиска, чтобы быстрее отфильтровать результаты. («Amazon.c») Бум, вы сразу видите свою электронную почту!

В этом поиске с фильтром вы использовали шаблон. Вы искали буквальную букву «А», за которой следовала буква «м», за которой следовала буква «а», за которой следовала буква «г»… поняли?

Общие выражения работают точно так же. Кроме того, когда мы используем регулярное выражение, мы динамически записываем шаблон, чтобы он мог фиксировать любой вариант использования, необходимый в этой конкретной ситуации. Мы можем сделать это, используя комбинацию символов (букв, цифр и символов). Да, и некоторые символы имеют особое значение. И, если вы используете их по-другому, они могут означать что-то еще. Также имеет значение последовательность. И верхний / нижний регистр имеет значение. Видите, как это может запутать?

Я знаю.

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

Литеральные и метасимволы

Регулярные выражения обычно заключаются в косую черту: «/ здесь ваш код регулярного выражения /». Для целей этого урока я их опущу. Но помните об этом, когда вы видите это в коде, это может усугубить путаницу. Я верну его в конце статьи, чтобы вы поняли, что я имею в виду.

Ниже приведены несколько примеров шпаргалок, которые я сделал для расшифровки кода регулярного выражения:

Если вы хотите, чтобы ваш поиск буквально соответствовал любому из этих метасимволов в определенной позиции строки, перед ними должна стоять обратная косая черта «\» (мы называем это «экранированием»). Сами по себе они имеют особое значение.

В то же время некоторые буквы имеют для них второстепенное значение. Чтобы использовать эти второстепенные значения, нам нужно добавить к букве обратную косую черту «\». Если мы используем букву «d» в нашем поиске по регулярному выражению, он будет искать любой буквальный символ «d» в нашем документе. Однако, если мы используем «\ d», он попытается сопоставить любую цифру от 0 до 9. В качестве альтернативы, «\ D» попытается сопоставить все, что НЕ является цифрой (0–9). Это тенденция с обратной косой чертой и заглавными буквами. Они будут пытаться соответствовать противоположному значению обратной косой черты и строчной буквы.

Ранее мы использовали пример электронной почты как случай использования буквальных символов. Если вы знаете, как должен выглядеть ваш желаемый поиск, вы можете быть довольно конкретными при создании кода регулярного выражения. Давайте перейдем к более простому примеру с телефонным номером. Если вы хотите найти конкретный номер телефона в своем документе, вы должны выполнить поиск по запросу «917–867–5309», чтобы найти его. Но предположим, что вы хотите найти все номера телефонов в своем документе? В этом может помочь регулярное выражение.

Чтобы найти все числа, мы будем использовать этот код:

Три цифры, за которыми следует буквальный дефис, за которыми следуют три цифры, за которыми следует буквальный дефис, за которым следуют четыре цифры. Это все еще можно отредактировать, но пока это работает.

Наборы символов и группы

Мы также можем использовать квадратные скобки и круглые скобки, чтобы указать, что мы хотим сопоставить при поиске.

Вернемся к нашему примеру с номером телефона. Наш код работает, но что, если некоторые номера телефонов отмечены знаком «.» Вместо «-» между цифрами? Наше текущее регулярное выражение не будет соответствовать этим числам. Давайте настроим наш код так, чтобы он соответствовал обоим стилям.

На этот раз мы используем набор символов, соответствующий либо дефису «-», либо точке «». на любой набор телефонных номеров. Здесь мы говорим, что после трех цифр найдите соответствие либо дефиса, либо точки. Хотя собственно кода «[-.]» Буквально четыре символа. Важно помнить, что результирующее совпадение по-прежнему будет только для одной позиции в строке.

Это также может быть написано с использованием групп.

Разница здесь в том, что мы идентифицируем наши совпадающие символы внутри группы «()» - когда мы используем группы, мы указываем именно то, что мы хотим сопоставить. В этом примере в сочетании с оператором «или» «|» мы кодируем наше регулярное выражение так, чтобы оно соответствовало «.» ИЛИ «-».

Любой способ подойдет для нашего конкретного случая. Однако мы программисты и ненавидим дублировать наш код, это не СУХОЙ. Мы можем реорганизовать это регулярное выражение с помощью квантификаторов!

Квантификаторы

Квантификаторы - это простой способ объяснить, сколько раз мы хотим повторить регулярное выражение, непосредственно предшествующее квантификатору.

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

Вуаля! Это довольно СУХОЕ регулярное выражение для номера телефона! Давайте подключим его к переменной JavaScript и продемонстрируем реальный вариант использования.

Примечание: в JavaScript регулярные выражения также являются объектами и используют свои шаблоны в методах конструктора RegExp.

Представьте, что в вашем веб-приложении есть форма, в которой пользователь должен ввести свой номер телефона. Один из способов проверить правильность формата - использовать общие выражения. В нашем примере ниже мы создали функцию проверки и использовали метод RegExp test (), чтобы проверить, действителен ли номер телефона, указанный в нашей форме.

Используя метод test () в нашем коде phoneRegex, мы можем проверить, соответствует ли введенный номер телефона желаемому формату.

Как я упоминал ранее, я не претендую на звание эксперта (пока!) По регулярным выражениям, но я надеюсь, что этот краткий обзор регулярных выражений помог сделать ваше понимание темы немного менее туманным. В этой статье я кратко коснулся буквальных и метасимволов, наборов символов и групп, а также квантификаторов.

Эта статья лишь поверхностно касается регулярных выражений. Я призываю вас изучить их дальше и узнать еще больше об их преимуществах!

Спасибо за прочтение! Если вы нашли эту статью полезной, похлопайте по ней, чтобы люди знали, что она существует! Я хотел бы услышать ваши отзывы о регулярных выражениях, поэтому, пожалуйста, оставьте комментарий ниже! Если вы хотите узнать, чем я занимаюсь, не стесняйтесь добавить меня в LinkedIn!