В этом руководстве вы узнаете о классах символов в регулярных выражениях в 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, чтобы класс символов точки(.) соответствовал любому символу, включая новую строку.
