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