Классы символов

Классы символов позволяют различать виды символов, к примеру, как различия между буквами и цифрами.

Типы

Символ Значение
.

Точка имеет одно из следеющих смыслов:

  • Сопадение с любым одним символом за исключение символовов завершения строки: \n, \r, \u2028 or \u2029. Например, /.y/ совпадает "my" с "ay", и не совпадает с "yes" и "yes make my day".
  • В набор символов, точка теряет свой специальный смысл и совпадает с литеральным символом точка.

Замечание. m флаг посика по множеству строк не меняет поведения точки. Чтобы найти воспадения во многострочном поиске можно использвать набор символов [^] — он сопадёт с любым символом включая символы заверешния строки.

В ES2018 добавили s "dotAll" флаг, который ползволяет точке (.) находить все символы включая симполвы переноса строк.

\d

Совпадет с любой цифрой (арабский числа). Эквивалентно  [0-9]. Например, /\d/ или /[0-9]/ находит "2" в "B2 is the suite number"..

\D

Совпадет с любым символом, который не является цифрой (арабский числа). Эквивалентно [^0-9]. Например, /\D/ or /[^0-9]/ находит "B" в "B2 is the suite number".

\w

Совпадет с любой бувенно-числовым симпволом из базового латинского алфавита включая нижнее подчёркивание.  Эквивалентно [A-Za-z0-9_]. Например, /\w/ находит "a" в "apple", "5" в "$5.28", "3" в "3D" и "m" в "Émanuel".

\W

Совпадет с любой бувенно-числовым, которое не является симпволом базового латинского алфавита, так же исключая нижнее подчёркивание.  Эквивалентно [^A-Za-z0-9_]. Например, /\W/ или /[^A-Za-z0-9_]/ находит "%" в "50%" и "É" in "Émanuel".

\s

Совпадет с любым пробельным символом, включая пробел, символ табуляции, символ подачи странцы, символ подачи строки и другие Unicode пробелы. Эквивалентно [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Например, /\s\w*/ находит " bar" в "foo bar".

\S

Совпадет с любым симвовом, не являяющимся проблельным. Эквивалентно [^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Например, /\S\w*/ находит "foo" в "foo bar".

\t Совпадет с символом горизонтальной табуляции.
\r Совпадет с символом возврата каретки.
\n Совпадет с символом подачи строки.
\v Совпадет с символом вертикальной табуляции
\f Совпадет с символом подачи страницы (формы).
[\b] Совпадет с символом возарат назад (англ. backspace). Если вы ищите символ границы слова (\b), смотри Границы.
\0 Совпадет с символом NUL character. Не используйте другую цифру.
\cX

Совпадет с котрольным символом using каретную нотацию, где "X" быква A–Z (соответствует кодам U+0001U+001F). For example, /\cM/ matches "\r" in "\r\n".

\xhh Совпадет с символом, код которого hh (две шестнадцатеричных цифры).
\uhhhh Совпадет с код-блоком UTF-16 со значением hhhh (четыре шестнадцатеричных цифры).
\u{hhhh} or \u{hhhhh} (Только когда установлен фла u.) Совпадет с Unicode символом со значением  U+hhhh или U+hhhhh (шестнадцатеричные цифры).
\

Определяет что последующий символ должен быть интерпретирован по особому или должен быть "экранирован. Это работает в двух вариантах:

  • Для символов, которые относятся к литералам, последующий символ - это специальный символ, который не должен быть интерпретирован, как литерал. Например, /b/ совпадает с символом "b". Установ обратного слэша перед "b". Таким образом /\b/. Будет означать символ границы слова. 
  • Для символов, которые относятся к специальным, определяет что это не специальным символ, а должен быть интерепретирован, как литерал. Например, *  - это специальный символ, который означает 0 или любое другое совпадений предыдующего символа, Например /a*/ совпадает с любым количестовм символов "a" идущих подряд (или 0 "a") a, aaaa, aaaaaa. Если специальный символ *, как литерал, то перед ним ставится обратных слэш. Например, /a\*/ сопадает только с "a*".

Чтобы найти литеральное совпадение с этим символова (\ , экранируйте его самим же. Другими словами для поиска \ используйте /\\/.

Примеры

Плиск серии цифр

var randomData = "015 354 8787 687351 3512 8735"; 
var regexpFourDigits = /\b\d{4}\b/g;
// \b определяет границу поиска (например, не начиает поиск с середины слова)
// \d{4} определяет цифру, четыре раза
// определяет другую границу поиска (например, не начиает поиск с середины слова)

// Вывод всех числел имеющих только 4 цифры
console.table(randomData.match(regexpFourDigits));
// ['8787', '3512', '8735']

Поиск слов  (латинский алфавит), начинающих с A

var aliceExcerpt = "I’m sure I’m not Ada,’ she said, ‘for her hair goes in such long ringlets, and mine doesn’t go in ringlets at all.";
var regexpWordStartingWithA = /\b[aA]\w+/g;
// \b определяет границу поиска (например, не начиает поиск с середины слова)
// [aA] определяет букву a или A
// \b определяет границу поиска (например, не начиает поиск с середины слова)

console.table(aliceExcerpt.match(regexpWordStartingWithA));
// ['Ada', 'and', 'at', 'all']

Поиски слов (из Unicode символов)

Вместо латинского алфавита, мы может использовать диапазаон Unicode символов для определения слова (благодаря этому мы можем работать с текстами написанным, например на русском или арабском языке or Arabic). Unicode содержит большинство символов используемых на планете, мы так же можем объединять их диапазоны и классы символов.

var nonEnglishText = "Приключения Алисы в Стране чудес";
var regexpBMPWord = /([\u0000-\u0019\u0021-\uFFFF])+/gu;
// BMP goes through U+0000 to U+FFFF but space is U+0020

console.table(nonEnglishText.match(regexpBMPWord));
[ 'Приключения', 'Алисы', 'в', 'Стране', 'чудес' ]

Спецификации

Спецификация
ECMAScript (ECMA-262)
Определение 'RegExp: Character classes' в этой спецификации.

Совместимость с браузерами

Для информации о совместимости с браузерами, посмотрите основную таблицу совместимости Regular Expressions.

Смотрите по теме