Регулярные выражения, также известные как регулярные выражения, представляют собой шаблоны, используемые в различных языках программирования, которые соответствуют частям примитивного типа данных, известного как строки. Если вы думали, что шаблоны уже достаточно сложно найти за пределами кода, вас ждет грубое пробуждение. Но не волнуйтесь, именно поэтому вы здесь; изучить основы сложной темы. Но напомню, это упрощенная версия регулярного выражения. Это означает, что вам придется продолжать читать по этой теме, но не беспокойтесь, потому что есть место, где можно продолжить изучение регулярных выражений, — это freeCodeCamp.org. В любом случае, давайте начнем ваше путешествие.

Введение

Математик по имени Кен Томпсон создал регулярное выражение в 1986 году. Он черпал вдохновение у Стивена Клини, Варена С. Маккалоха и Уолтера Питтса. Хотя регулярное выражение может показаться простой концепцией, оно имеет несколько ключевых частей, которые необходимо изучить, чтобы использовать его возможности. В этой статье мы рассмотрим только пять частей: классы символов, якоря, квантификаторы и чередование. В этой статье в качестве языка программирования используется JavaScript.

Задерживать!

Я забыл упомянуть самую важную часть, структуру регулярного выражения и то, как даже использовать этот шаблон. Чтобы начать шаблон, вы должны сначала создать шаблон. Вы делаете это с помощью двух косых черт, таких как / /. Мы знаем это как search pattern. Чтобы найти точное совпадение, вы просто вставите строку между шаблоном поиска, например /Jason/. По умолчанию будет найдено только первое совпадение Jason. Однако вы можете изменить поведение шаблона поиска с помощью флагов. Мы будем использовать два типа флагов, -g и -i. Выполняя /Jason/g, шаблон поиска теперь будет просматривать несколько записей Jason в строке.

let string = 'Jason Padilla';
let literalMatch = /Jason/g;

const test = literalMatch.test(string);
const match = string.match(literalMatch);

console.log(test) // true
console.log(match) // [‘Jason’]

Теперь добавьте -i к шаблону поиска: /Jason/gi. Этот шаблон поиска больше не чувствителен к регистру, а это означает, что если в строке есть Jason, как JASON или jAson, шаблон все равно будет соответствовать ему.

let string = 'Jason jAson JASON';
let regex = /Jason/g;

const match = string.match(regex);

console.log(match) // [‘Jason’]



let string = 'Jason jAson JASON';
let regex = /Jason/gi;

const match = string.match(regex);

console.log(match)  // [‘Jason’, ‘jAson’, ‘JASON’]

Есть и другие особые персонажи, о которых стоит поговорить, но шоу должно продолжаться. И чтобы продолжить это шоу, вы должны увидеть, работает ли вообще регулярное выражение. Мы можем сделать это с помощью метода .test(). Этот метод берет регулярное выражение, применяет его к строке и возвращает true или false в зависимости от того, было ли найдено совпадение или нет. Есть еще один метод, известный как .match(), который создает новый массив, извлекает совпадения и помещает их в этот новый массив. Теперь давайте начнем.

Классы персонажей

Прежде всего, классы символов просты, это позволяет компьютеру различать символы. Пример этого может различать буквы и цифры или только цифры. Чтобы соответствовать только числам, введите в шаблон поиска /\d/g с добавлением флага -g для включения итерации.

let numbers = "1234567890";
let regex = /\d/g;

const match = numbers.match(regex);

console.log(match) // [‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘0’]

Чтобы сопоставить буквы и цифры, введите \w в шаблон поиска для соответствия любому символу (буквенно-цифровому и символу подчеркивания).

let numbers = "A B C, It's easy as 123";
let regex = /\w/g;

const match = numbers.match(regex);

console.log(match)  // ['A', 'B', 'C', 'I', 't', 's', 'e', 'a', 's', 'y', 'a', 's', '1', '2', '3']

Вы также можете сделать обратное с заглавными буквами; \D соответствует всему, что не является цифрой, а \S соответствует всему, кроме пробелов, разрывов строк и табуляции.

let numbers = "A B C, It's easy as 123";
let regex = /\D/g;

const match = numbers.match(regex);

console.log(match) // ['A', ' ', 'B', ' ', 'C', ',', ' ', 'I', 't', "'", 's', ' ', 'e', 'a', 's', 'y', ' ', 'a', 's', ' ']



let numbers = "A B C, It's easy as 123";
let regex = /\S/g;

const match = numbers.match(regex);

console.log(match) // ['A', 'B', 'C', ',', 'I', 't', "'", 's', 'e', 'a', 's', 'y', 'a', 's', '1', '2', '3']

Еще одна классная вещь в классе символов — квадратные скобки []. Это позволяет вам искать определенную группу символов, которые вы хотите сопоставить. Чтобы улучшить это, вы можете определить диапазон символов, которые вы хотите сопоставить, используя дефисы -. Мы можем увидеть пример этого ниже. В этом примере я хочу сопоставить все символы, которые заканчиваются на at. Это делается путем определения диапазона всех буквенных символов до [a-z] и добавления `at` в конце как точного совпадения с нужными нам конечными символами.

let numbers = "That rat ran with my food. So I tried to hit it with a bat. Afterwards I laid on the mat while he ate the food on my doormat";

let regex = /[a-z]at/g;

const match = numbers.match(regex);

console.log(match) // ['hat', 'rat', 'bat', 'mat', 'mat']

Якоря

Якоря в регулярных выражениях особенные, так как они не соответствуют определенным символам; они соответствуют положению персонажа. ^ привязка соответствует положению символа в начале текста. $ привязка соответствует положению символа в конце текста.

let numbers = "The story never ends, it just has new beginning";
let regex = /^The/g;

const match = numbers.match(regex);

console.log(match) // ['The']



let numbers = "The story never ends, it just has new beginning";
let regex = /beginning$/g;

const match = numbers.match(regex);

console.log(match) // ['beginning']

Квантификаторы и чередование

Квантификаторы определяют количество символов, которые должны сопоставляться в строке. В этом разделе мы будем говорить только о спецификаторах количества с помощью фигурных скобок {}. Фигурные скобки состоят из двух частей, нижней и верхней цифр. Чередование выполняется после логического оператора ИЛИ |, который соответствует той или иной строке.

let numbers = "abcdefghijklmnopqrstuvwxyz";
let regex = /[a-z]{10}/g;

const match = numbers.match(regex);

console.log(match) // ['abcdefghij', 'klmnopqrst']



let numbers = "Here at Marcy Lab, we do both frontend and backend development";
let literalMatch = /frontend|backend/g;

const match = numbers.match(literalMatch);

console.log(match) // ['frontend', 'backend']

Закрыть

Регулярные выражения вообще непростая тема для изучения. Есть много компонентов регулярных выражений, которые я особо не упомянул, потому что они глубоко погружаются в возможности регулярных выражений; некоторые из них — положительный/отрицательный обзор, захват групп и т. д. Помните, что эта статья представляет собой простой обзор регулярных выражений, поэтому в ваших интересах продолжить изучение на других платформах. Некоторые ресурсы, которые я рекомендую, это freeCodeCamp (где я черпал вдохновение), Odin Project, MDN и так далее. Помните, кодирование — это навык, который приобретается в результате бесчисленных часов учебы и работы; так что не расстраивайтесь, когда времена или обсуждаемая тема становятся трудными. Продолжайте двигаться вперед и спасибо, что нашли время, чтобы прочитать мою статью.