Наборы и диапазоны в регулярных выражениях JavaScript

В этом уроке вы узнаете о наборах и диапазонах в регулярных выражениях JavaScript.

Наборы

Квадратные скобки ищут любой символ в наборе. Например, [aeiou] соответствует любому из пяти символов: 'a''e''i''o' и 'u';. [...] называется набором.

Например, регулярное выражение /[cbr]ats/g соответствует cats, bats и rats :

let str = 'How cats, rats, and bats became Halloween animals';
let re = /[cbr]ats/g;
let results = str.match(re);

console.log(results);

Выход:

["cats", "rats", "bats"]

Диапазоны

Квадратные скобки могут содержать диапазоны символов. Например, [az] — это диапазон символов от a до z. А [0-9] — это цифра от 0 до 9.

[a-zA-Z0-9_] совпадает с \w. [0-9] совпадает с \d.

Исключение диапазонов

Чтобы отрицать диапазон, вы используете исключающий диапазон, например: [^...].

Например, [^0-9] соответствует любому символу, кроме цифры. Это то же самое, что \D.

Или [^aeiou] соответствует любому символу, кроме 'a''e''i''o' и 'u'.

Экранирование специальных символов

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

Например, если знак вставки ( ^ ) находится в начале строки, вам нужно его экранировать:

[\^#$]

Если знак вставки не находится в начале строки ( ^ ), вам не нужно экранировать:

[#^$]

Флаг u

Если в наборе есть суррогатная пара, вам нужно добавить флаг u в регулярное выражение, чтобы оно работало правильно:

let result = 'It is 🍎'.match(/[🍎🍅🍓]/);

console.log(result);

Выход:

["�"]

В этом примере [🍎🍅🍓] состоит из шести символов, а не из трех:

let str = '🍎🍅🍓';

for(let i=0; i<str.length; i++) {
    console.log(str.charCodeAt(i));
}

Выход:

55356
57166
55356
57157
55356
57171

Если добавить флаг u, то поведение будет корректным:

let result = 'It is 🍎'.match(/[🍎🍅🍓]/u);

console.log(result);

Выход:

["🍎"]

Заключение

  • Используйте [...], чтобы создать набор, соответствующий любому символу в нем.
  • Используйте - внутри набора, чтобы создать диапазон, соответствующий любому символу в диапазоне.
  • Используйте ^ для отрицания диапазона.
Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript