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

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

Типы

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

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

  • Совпадение с любым одним символом за исключение символов завершения строки: \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.

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