Классы символов в регулярных выражениях в JavaScript

В этом руководстве вы узнаете о классах символов в регулярных выражениях в 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 ).
  • \ww обозначает символ слова. Он соответствует символу 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, чтобы класс символов точки( . ) соответствовал любому символу, включая новую строку.
Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript