This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

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

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

Интерактивный пример

const chessStory = "He played the King in a8 and she moved her Queen in c2.";
const regexpCoordinates = /\w\d/g;
console.log(chessStory.match(regexpCoordinates));
// Expected output: Array [ 'a8', 'c2']

const moods = "happy 🙂, confused 😕, sad 😢";
const regexpEmoticons = /[\u{1F600}-\u{1F64F}]/gu;
console.log(moods.match(regexpEmoticons));
// Expected output: Array ['🙂', '😕', '😢']

Типы

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

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

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

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

Примеры

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

js
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

js
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 содержит большинство символов используемых на планете, мы так же можем объединять их диапазоны и классы символов.

js
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));
["Приключения", "Алисы", "в", "Стране", "чудес"];

Смотрите также