Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions 9-regular-expressions/02-regexp-character-classes/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Рассмотрим практическую задачу - у нас есть номер телефона вида `"+7(903)-123-45-67"`, и нам нужно превратить его в строку только из чисел: `79031234567`.

Для этого мы можем найти и удалить все, что не является числом. С этим нам помогут символьные классы.
Для этого мы можем найти и удалить всё, что не является числом. С этим нам помогут символьные классы.

*Символьный класс* - это специальное обозначение, которое соответствует любому символу из определённого набора.

Expand Down Expand Up @@ -44,7 +44,7 @@ alert( str.match(regexp).join('') ); // 79031234567
: Пробельные символы: включает в себя символ пробела, табуляции `\t`, перевода строки `\n` и некоторые другие редкие пробельные символы, обозначаемые как `\v`, `\f` и `\r`.

`pattern:\w` ("w": от английского "word" – "слово")
: Символ "слова", а точнее – буква латинского алфавита или цифра или подчёркивание `_`. Нелатинские буквы не являются частью класса `pattern:\w`, то есть буква русского алфавита не подходит.
: Символ "слова", а точнее – буква латинского алфавита, цифра или подчёркивание `_`. Нелатинские буквы не являются частью класса `pattern:\w`, то есть буква русского алфавита не подходит.

Для примера, `pattern:\d\s\w` обозначает "цифру", за которой идёт пробельный символ, а затем символ слова, например `match:1 a`.

Expand Down Expand Up @@ -82,7 +82,7 @@ alert( "I love HTML5!".match(/\s\w\w\w\w\d/) ); // ' HTML5'
: Не пробел: любой символ, кроме `pattern:\s`, например буква.

`pattern:\W`
: Любой символ, кроме `pattern:\w`, то есть не буквы из латиницы, не знак подчёркивания и не цифра. В частности, русские буквы принадлежат этому классу.
: Любой символ, кроме `pattern:\w`, то есть не буква из латиницы, не знак подчёркивания и не цифра. В частности, русские буквы принадлежат этому классу.

Мы уже видели, как сделать чисто цифровой номер из строки вида `subject:+7(903)-123-45-67`: найти все цифры и соединить их.

Expand Down Expand Up @@ -124,14 +124,14 @@ alert( "CS 4".match(regexp) ); // CS 4 (пробел тоже является
Обратите внимание, что точка означает "любой символ", но не "отсутствие символа". Там должен быть какой-либо символ, чтобы соответствовать условию поиска:

```js run
alert( "CS4".match(/CS.4/) ); // null, нет совпадений потому что нет символа для точки
alert( "CS4".match(/CS.4/) ); // null, нет совпадений, потому что нет символа для точки
```

### Точка как буквально любой символ, с флагом "s"

Обычно точка не соответствует символу новой строки `\n`.

То есть, регулярное выражение `pattern:A.B` будет искать символ `match:A` и затем `match:B`, с любым символом между ними, кроме перевода строки `\n`:
То есть регулярное выражение `pattern:A.B` будет искать символ `match:A` и затем `match:B`, с любым символом между ними, кроме перевода строки `\n`:

```js run
alert( "A\nB".match(/A.B/) ); // null (нет совпадения)
Expand Down Expand Up @@ -166,7 +166,7 @@ alert( "1 - 5".match(/\d\s-\s\d/) ); // 1 - 5, тоже работает

**Пробел - это символ. Такой же важный, как любой другой.**

Нельзя просто добавить или удалить пробелы из регулярного выражения, и ожидать, что оно будет также работать.
Нельзя просто добавить или удалить пробелы из регулярного выражения, и ожидать, что оно будет работать так же.

Другими словами, в регулярном выражении все символы имеют значение, даже пробелы.
````
Expand All @@ -179,7 +179,7 @@ alert( "1 - 5".match(/\d\s-\s\d/) ); // 1 - 5, тоже работает
- `pattern:\D` -- не цифры.
- `pattern:\s` -- пробельные символы, табы, новые строки.
- `pattern:\S` -- все, кроме `pattern:\s`.
- `pattern:\w` -- латиница, цифры, подчёркивание `'_'`.
- `pattern:\w` -- латиница, цифры, подчёркивание `_`.
- `pattern:\W` -- все, кроме `pattern:\w`.
- `pattern:.` -- любой символ, если с флагом регулярного выражения `pattern:s`, в противном случае любой символ, кроме перевода строки `\n`.

Expand Down