Skip to content

Commit 89e73ec

Browse files
committed
Update 9-regular-expressions_03-regexp-character-classes_article.md_ru #78
1 parent 11a2392 commit 89e73ec

1 file changed

Lines changed: 18 additions & 16 deletions

File tree

  • 9-regular-expressions/03-regexp-character-classes

9-regular-expressions/03-regexp-character-classes/article.md

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

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

9-
Для начала давайте рассмотрим класс "цифр". Он обозначается как `\d`. Мы помещаем это обозначение в регулярное выражение, что соответствует "любой одной цифре".
9+
Для начала давайте рассмотрим класс "цифра". Он обозначается как `\d`. Мы помещаем это обозначение в регулярное выражение, что соответствует "любой одной цифре".
1010

1111
Например, давайте найдем первую цифру в номере телефона:
1212

@@ -43,7 +43,7 @@ alert( str.match(reg).join('') ); // 79035419441
4343
: Символ пробела: включает пробелы, символы табуляции, переводы строк.
4444

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

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

@@ -81,7 +81,7 @@ alert( "Привет, Java!".match(/\bJava\b/) ); // Java
8181
alert( "Привет, JavaScript!".match(/\bJava\b/) ); // null
8282
```
8383

84-
Граница имеет "нулевую ширину" в том смысле, что обычно символьный класс означает символ в результате (например, символ или цифру), но не в этом случае.
84+
Граница имеет "нулевую ширину" в том смысле, что обычно символьный класс означает символ в результате (например, букву или цифру), но не в этом случае.
8585

8686
Граница – это проверка.
8787

@@ -93,31 +93,31 @@ alert( "Привет, JavaScript!".match(/\bJava\b/) ); // null
9393
- Начало текста, если первый символ `\w`.
9494
- Конец текста, если последний символ `\w`.
9595

96-
Например, в строке `subject:Привет, Java!` Следующие позиции соответствуют `\b`:
96+
Например, в строке `subject:Hello, Java!` Следующие позиции соответствуют `\b`:
9797

9898
![](hello-java-boundaries.png)
9999

100-
Так что это соответствует `pattern:\bПривет\b`, потому что:
100+
Так что это соответствует `pattern:\bHello\b`, потому что:
101101

102102
1. В начале строки совпадает первый тест `\b`.
103-
2. Далее слово `Привет` совпадает.
104-
3. Далее `\b` снова совпадает, так как мы находимся между `т` и пробелом.
103+
2. Далее слово `Hello` совпадает.
104+
3. Далее `\b` снова совпадает, так как мы находимся между `o` и пробелом.
105105

106-
Pattern `pattern:\bJava\b` также совпадает. Но не `pattern:\bПривед\b` (потому что после `д` нет границы слова), и не `Java!\b` (потому что восклицательный знак не является словесным символом, поэтому после него нет границы слова).
106+
Pattern `pattern:\bJava\b` также совпадает. Но не `pattern:\bHell\b` (потому что после `l` нет границы слова), и не `Java!\b` (потому что восклицательный знак не является словесным символом, поэтому после него нет границы слова).
107107

108108

109109
```js run
110-
alert( "Привет, Java!".match(/\bПривет\b/) ); // Привет
111-
alert( "Привет, Java!".match(/\bJava\b/) ); // Java
112-
alert( "Привет, Java!".match(/\bПривед\b/) ); // null (нет совпадения)
113-
alert( "Привет, Java!".match(/\bJava!\b/) ); // null (нет совпадения)
110+
alert( "Hello, Java!".match(/\bHello\b/) ); // Hello
111+
alert( "Hello, Java!".match(/\bJava\b/) ); // Java
112+
alert( "Hello, Java!".match(/\bHell\b/) ); // null (нет совпадения)
113+
alert( "Hello, Java!".match(/\bJava!\b/) ); // null (нет совпадения)
114114
```
115115

116116
Еще раз отметим, что `pattern:\b` заставляет поисковую систему проверять границы, поэтому `pattern:Java\b` находит `match:Java` только тогда, когда за ней следует граница слова, но не добавляет этот символ к результату.
117117

118-
Обычно мы используем `\b`, чтобы найти отдельные английские слова. Таким образом, если нам нужен `"Java"` язык, то `pattern:\bJava\b` находит только отдельное слово и игнорирует его, когда оно является частью `"JavaScript"`.
118+
Обычно мы используем `\b`, чтобы найти отдельные английские слова. Таким образом, если нам нужен `"Java"` язык, то `pattern:\bJava\b` находит только отдельное слово и ничего не находит, когда оно является частью, как в `"JavaScript"`.
119119

120-
Другой пример: регулярное выражение `pattern:\b\d\d\b` ищет отдельно стоящие двузначные числа. Другими словами, требуется, чтобы до и после `pattern:\d\d` был символ, отличный от `\w` (или начала/конца строки)
120+
Другой пример: регулярное выражение `pattern:\b\d\d\b` ищет отдельно стоящие двузначные числа. Другими словами, требуется, чтобы до и после `pattern:\d\d` был символ, отличный от `\w` (или начало/конец строки)
121121

122122
```js run
123123
alert( "1 23 456 78".match(/\b\d\d\b/g) ); // 23,78
@@ -255,11 +255,13 @@ alert( "A\nB".match(/A.B/s) ); // A\nB (совпадение!)
255255

256256
...Но это не все!
257257

258-
Современный JavaScript также позволяет искать символы по их свойствам Юникода, например:
258+
В кодировке Unicode, которую JavaScript использует для строк, каждому символу соответствует ряд свойств, например - какого языка это буква, является ли символ знаком пунктуации, и т.п.
259+
260+
Современный JavaScript позволяет использовать эти свойства в регулярном выражении для поиска, например:
259261

260262
- Кириллица: `pattern:\p{Script=Cyrillic}` или `pattern:\p{sc=Cyrillic}`.
261263
- Тире (будь то короткое `-` или длинное тире ``): `pattern:\p{Dash_Punctuation}` или `pattern:\p{pd}`.
262-
- Валюта: `pattern:\p{Currency_Symbol}` или `pattern:\p{sc}`.
264+
- Обозначение валюты, как например, `pattern:\p{Currency_Symbol}` или `pattern:\p{sc}`.
263265
- ...И многое другое. Юникод имеет много категорий символов, которые мы можем выбрать.
264266

265267
Для работы этих шаблонов необходим флаг регулярного выражения `'u'`. Подробнее об этом в главе [](info:regexp-unicode).

0 commit comments

Comments
 (0)