В этом руководстве вы узнаете о классах символов в регулярных выражениях в JavaScript для сопоставления набора символов, включая цифры, пробелы и слова.
Символьный класс позволяет вам сопоставлять любой символ из определенного набора символов. Класс символов также называется набором символов. Предположим, у вас есть такой номер телефона:
+1-(408)-555-0105
И вы хотите превратить его в обычный номер:
14085550105
Классы символов в регулярных выражениях могут помочь вам в этом.
Давайте сначала рассмотрим класс цифровых символов. Класс цифровых символов обозначается \d
и соответствует любой одиночной цифре:
\d
В следующем примере \d
используется для сопоставления первой цифры в телефонном номере:
let phone = '+1-(408)-555-0105'; let re = /\d/; console.log(phone.match(re));
Выход:
["1"]
Когда вы добавляете глобальный флаг( g
), регулярное выражение будет искать все числа, а не первое:
let phone = '+1-(408)-555-0105'; let re = /\d/g; console.log(phone.match(re));
Выход:
["1", "4", "0", "8", "5", "5", "5", "0", "1", "0", "5"]
Теперь вы можете превратить номер телефона в обычный номер следующим образом:
- Используйте метод
match()
, чтобы вернуть массив, содержащий числа. - Используйте метод
join()
для объединения элементов массива в строку.
Например:
let phone = '+1-(408)-555-0105'; let re = /\d/g; let numbers = phone.match(re); let phoneNo = numbers.join(''); console.log(phoneNo);
Выход:
14085550105
Короче говоря, вы можете связать методы match()
и join()
следующим образом:
console.log('+1-(408)-555-0105'.match(/\d/g).join(''));
Помимо класса цифровых символов( \d
), регулярные выражения поддерживают другие классы символов.
Наиболее часто используемые классы символов:
\d
— соответствует одной цифре или символу от 0 до 9.\s
— соответствует одному символу пробела, такому как пробел, табуляция(\t), новая строка(\n
).\w
–w
обозначает символ слова. Он соответствует символу ASCII[A-Za-z0-9_]
, включая латинские буквы, цифры и знак подчеркивания(_
).
На практике вы часто комбинируете символьные классы, чтобы сформировать более сильную пару.
Например, \w\d
соответствует любому слову, за которым следует цифра, например O2
:
let str = 'O2 is oxygen'; let re = /\w\d/g console.log(str.match(re));
Выход:
O2
Шаблон может содержать как обычные символы, так и классы символов. Например, регулярное выражение ES\d
соответствует ES
, за которым следует цифра вроде ES6
:
let str = 'ES6 Tutorial'; let re = /ES\d/g console.log(str.match(re));
Выход:
["ES6"]
Обратные классы
Класс символов имеет обратный класс с той же буквой, но в верхнем регистре, например, \D
является инверсией \d
.
Инверсный класс соответствует всем остальным символам. Например, \D
соответствует любому символу, кроме цифры(или \d
). Ниже приведены обратные классы:
\D
– соответствует любому символу, кроме цифры, например, букве.\S
— соответствует любому символу, кроме пробела, например, букве\W
– соответствует любому символу, кроме символа слова, например, нелатинской букве или пробелу.
Вернемся к примеру с номером телефона. Вы можете использовать \d
с глобальным флагом( g
):
let phone = '+1-(408)-555-0105'; let re = /\d/g; console.log(phone.match(re).join(''));
Выход:
14085550105
Или вы можете удалить нецифровые символы с помощью обратного класса \D
и заменить все нецифровые символы пробелами, например:
let phone = '+1-(408)-555-0105'; let re = /\D/g; console.log(phone.replace(re,''));
Выход:
14085550105
Класс символов — (.)
( .
) — это специальный класс символов, который соответствует любому символу, кроме символа новой строки:
let re = /E.6/ console.log('ES6'.match(re));
Выход:
["ES6", index: 0, input: "ES6", groups: undefined]
Однако следующий пример возвращает null
:
let re = /ES.6/ console.log('ES\n6'.match(re));
Если вы хотите использовать класс символов точка( .
) для соответствия любому символу, включая новую строку, вы можете использовать флаг s
:
let re = /ES.6/s console.log('ES\n6'.match(re));
Выход:
["ES 6"]
Заключение
- Классы символов соответствуют любому символу из определенных наборов, например,
\d
,\s
и\w
. - Классы символов
\d
,\s
и\w
имеют обратные классы\D
,\S
и\W
, которые соответствуют другим символам, кроме\d
,\s
и\w
. - (
.
) соответствует любому символу, кроме символа новой строки. Используйте флагs
, чтобы класс символов точки(.
) соответствовал любому символу, включая новую строку.