В этом уроке вы узнаете о наборах и диапазонах в регулярных выражениях 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);
Выход:
["🍎"]
Заключение
- Используйте
[...], чтобы создать набор, соответствующий любому символу в нем. - Используйте
-внутри набора, чтобы создать диапазон, соответствующий любому символу в диапазоне. - Используйте
^для отрицания диапазона.
