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

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

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

Типы
----

| Символ | Значение |
| --- | --- |
| `.` | Точка имеет одно из следующих смыслов:* Совпадение с любым одним символом *за исключение* символов
 завершения строки: `\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. Не используйте другую цифру. |
| `\c*X*` | 
 Совпадёт с контрольным символом using
 каретную нотацию, где "X" буква A–Z (соответствует кодам `U+0001`*–*`U+001F`). For example, `/\cM/` matches "\r" in
 "\r\n".
  |
| `\x*hh*` | 
 Совпадёт с символом, код которого `*hh*` (две
 шестнадцатеричных цифры).
  |
| `\u*hhhh*` | 
 Совпадёт с код-блоком 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));
["Приключения", "Алисы", "в", "Стране", "чудес"];
```

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

* Руководство по Regular expressions
    + Assertions
    + Quantifiers (en-US)
    + Unicode property escapes (en-US)
    + Groups and ranges (en-US)
* Конструктор `RegExp()`