1. regex — основы


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

Регулярное выражение (regexp, regular expression) — это шаблон, используемый для поиска определенного набора символов в заданной текстовой строке.

Простые узоры

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

regex: У Ала есть кошка.
строка: У Даниэля есть собака, а у Ала — кошка.

2. специальные символы


Аннотация: В примерах я показываю поиск с использованием флага g (глобальный). Подробнее об этом в разделе «Флаги».

Мы можем дополнить или заменить первый способ вторым, который заключается в создании шаблона с помощью специальных символов. К ним относятся:

  • [xyz] — набор символов. Это означает, что в текстовой строке мы будем искать один из символов, указанных между квадратными скобками. Мы также можем описать заданный набор как диапазон, например, [a-c], это означает, что мы ищем один из символов в диапазоне, то есть a, b или c.

regex: [a-c0-3]
строка: Евгений вalcноль 43 воинaми.

  • [^xyz] — отрицание набора символов. Мы не будем искать ни одного из указанных символов в заданной текстовой строке.

regex: [^0-3]
струна: 1333.004

  • . — Сопоставляет любой тип символов, кроме символов перевода строки. С другой стороны, в наборе символов он теряет свое свойство и соответствует символу точки.

regex: [a-b.].
струна: .c.e

regex: .
струна: Eugenius

  • d — Соответствует любому цифровому символу, эквивалентно [0-9.

  • d — Отрицает числовой символ, соответствует любому символу, который не является цифрой. Эквивалент [^0-9].

  • W — Сопоставляет любой буквенно-цифровой символ из основного латинского алфавита. Эквивалент [A-Za-z0-9_].

  • ¯w — отрицание ¯w. Сопоставляет все, что не является символом из основного латинского алфавита. Эквивалент [^A-Za-z0-9_].

  • ■ — Сопоставляет один белый символ (пробел, табуляция, enter).

  • Сочетается с любым НЕ белым символом.

Из приведенных выше описаний можно сделать вывод, что сокращенное описание паттерна, содержащее прописную букву, является отрицанием паттерна, написанного со строчной буквы(D — d).

Другие специальные символы можно найти здесь.

3 Группировка

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

regex: (■d*) (■d*) (■d*)
строка: 25 января 2015 г.

матч 0 — 25 января 2015 г.
группа 1 — 25
группа 2 — январь
группа 3 — 2015

В этом примере мы видим, как найденные группы занимают следующие места в таблице.

const re = new RegExp(/(d*) (w*) (d*)/);
const string = '25 Stycznia 2015';
const found = string.match(re);
console.log(found);

> ["25 Stycznia 2015", "25", "Stycznia", "2015"]
Войдите в полноэкранный режим Выход из полноэкранного режима

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

В синтаксисе регулярных выражений мы также используем квантификаторы, которые указывают нам, сколько символов мы хотим сопоставить с заданным шаблоном. Ниже приведен их список с описанием того, как их использовать:

  • x* — соответствует шаблону x, ноль или более раз.

В примере видно, что без использования квантификатора «звездочка» будет сопоставлен только один буквенно-цифровой символ (в данном случае строчная буква e).

regex: ([A-Z])}
струна: Res

regex: ([A-Z])}
струна: Res

В отличие от этого, ниже мы видим, что, несмотря на отсутствие символа в диапазоне [a-e] между буквами A и l, текстовая строка Альм будут сопоставлены, поскольку квантификатор звездочки допускает отсутствие рассматриваемого символа.

regex: A[a-e]*lm
струна: Альмвсе сделано.

  • x+ — Совпадает с шаблоном x, один или несколько раз.

  • x? — Совпадает с шаблоном x, ноль или один раз.

  • x{n} — Совпадает с шаблоном x ‘n’ раз.

regex: d{2}
струна: 123

  • x{n,} — Совпадает с шаблоном x минимум n раз.

  • x{n,m} — Совпадает с шаблоном x минимум «n» раз, но не более «m» раз.

4 Основные утверждения

Утверждения в регулярных выражениях отвечают за «границы», то есть начала и концы строк и слов, на их основе мы можем определить, где должно происходить сопоставление (в начале текстовой строки, в конце, после заданного символа или перед заданным символом). Типы утверждений:

  • ^ — Сопоставляет начало текстовой строки.
  • $ — Сопоставляет конец текстовой строки.

regex: ^d*
струна: 481 234 233

regex: d*$
строка: 481 234 233

  • b — Граница текстовой строки нулевой длины. Сопоставляет позицию между буквенно-цифровым символом(n) и отрицанием буквенно-цифрового символа(n).

regex: ■ ■ ■ ■ ■ ■.
строка: 4813 234 2334

В приведенном примере никакие числа, кроме 234(пробел не является буквенно-цифровым символом в смысле регулярных выражений, поэтому он сопоставляется как граница сопоставляемой текстовой строки), потому что в строке 4183 есть числовой символ(4), а шаблон требует небуквенно-цифровой символ, что также имеет место с числом 2334.

Приведу другой пример, более сложный:

regex: -bcat
строка: строка кот разбросанные.
строка: the$кот$scattered.

Слово cat будет подобрано, если оно находится между двумя пробелами, но не будет подобрано, если оно находится в слове s*cat*tered. Он также будет сопоставляться между знаками доллара.
Почему? Пробел и символ $ не являются буквенно-цифровыми символами или символом подчеркивания (который является исключением), поэтому они не являются частью слова cat.

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

  • B — Сопоставляет элемент, который не является границей слова.

regex: B.*
строка: nна

regex: s
струна: sells

В этом случае последний символ s не будет сопоставлен, потому что сразу после него находится естественная граница слова — пробел.

5 флагов

У регулярных выражений есть флаги, которые мы можем использовать для расширения их функциональности, они могут использоваться по отдельности или в комбинации, порядок их записи не имеет значения.

  • g — Глобальный поиск, условия, при которых в заданной текстовой строке будут найдены все возможные совпадения. Метод работы основан на том, что за первым совпадением не следует конец программы, а начинается другой поиск с конца предыдущего совпадения.

  • i — Нечувствительный к регистру, флаг, определяющий, что мы ищем, не обращая внимания на регистр символов.

  • m — Использование определяет, что утверждения ^ и $ действуют на новые строки, а не на весь текст строки.

regex: /^{3}$/mg
струна:
123
334

Подробнее о флагах вы можете прочитать здесь.

В следующей статье я опишу использование возвратных ссылок, lookahead, lookbehind и другие возможности группировки.

Оцените статью
devanswers.ru
Добавить комментарий