You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 9-regular-expressions/03-regexp-character-classes/article.md
+18-16Lines changed: 18 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@
6
6
7
7
Символьный класс - это специальное обозначение, которое соответствует любому символу из определенного набора.
8
8
9
-
Для начала давайте рассмотрим класс "цифр". Он обозначается как `\d`. Мы помещаем это обозначение в регулярное выражение, что соответствует "любой одной цифре".
9
+
Для начала давайте рассмотрим класс "цифра". Он обозначается как `\d`. Мы помещаем это обозначение в регулярное выражение, что соответствует "любой одной цифре".
10
10
11
11
Например, давайте найдем первую цифру в номере телефона:
: Символ пробела: включает пробелы, символы табуляции, переводы строк.
44
44
45
45
`\w` ("w": от английского "word" – "слово")
46
-
: Символ «слова», а точнее – буква латинского алфавита или цифра или подчёркивание '_'. Не-английские буквы не являются частью `\w`, то есть русская буква не подходит.
46
+
: Символ «слова», а точнее – буква латинского алфавита или цифра или подчёркивание '_'. Нелатинские буквы не являются частью `\w`, то есть буква русского алфавита не подходит.
47
47
48
48
Для примера, `pattern:\d\s\w` обозначает "цифру", за которой идёт пробельный символ, а затем символ слова, как в строке `"1 a"`.
Граница имеет "нулевую ширину" в том смысле, что обычно символьный класс означает символ в результате (например, символ или цифру), но не в этом случае.
84
+
Граница имеет "нулевую ширину" в том смысле, что обычно символьный класс означает символ в результате (например, букву или цифру), но не в этом случае.
Например, в строке `subject:Привет, Java!` Следующие позиции соответствуют `\b`:
96
+
Например, в строке `subject:Hello, Java!` Следующие позиции соответствуют `\b`:
97
97
98
98

99
99
100
-
Так что это соответствует `pattern:\bПривет\b`, потому что:
100
+
Так что это соответствует `pattern:\bHello\b`, потому что:
101
101
102
102
1. В начале строки совпадает первый тест `\b`.
103
-
2. Далее слово `Привет` совпадает.
104
-
3. Далее `\b` снова совпадает, так как мы находимся между `т` и пробелом.
103
+
2. Далее слово `Hello` совпадает.
104
+
3. Далее `\b` снова совпадает, так как мы находимся между `o` и пробелом.
105
105
106
-
Pattern `pattern:\bJava\b` также совпадает. Но не `pattern:\bПривед\b` (потому что после `д` нет границы слова), и не `Java!\b` (потому что восклицательный знак не является словесным символом, поэтому после него нет границы слова).
106
+
Pattern `pattern:\bJava\b` также совпадает. Но не `pattern:\bHell\b` (потому что после `l` нет границы слова), и не `Java!\b` (потому что восклицательный знак не является словесным символом, поэтому после него нет границы слова).
Еще раз отметим, что `pattern:\b` заставляет поисковую систему проверять границы, поэтому `pattern:Java\b` находит `match:Java` только тогда, когда за ней следует граница слова, но не добавляет этот символ к результату.
117
117
118
-
Обычно мы используем `\b`, чтобы найти отдельные английские слова. Таким образом, если нам нужен `"Java"` язык, то `pattern:\bJava\b` находит только отдельное слово и игнорирует его, когда оно является частью `"JavaScript"`.
118
+
Обычно мы используем `\b`, чтобы найти отдельные английские слова. Таким образом, если нам нужен `"Java"` язык, то `pattern:\bJava\b` находит только отдельное слово и ничего не находит, когда оно является частью, как в`"JavaScript"`.
119
119
120
-
Другой пример: регулярное выражение `pattern:\b\d\d\b` ищет отдельно стоящие двузначные числа. Другими словами, требуется, чтобы до и после `pattern:\d\d` был символ, отличный от `\w` (или начала/конца строки)
120
+
Другой пример: регулярное выражение `pattern:\b\d\d\b` ищет отдельно стоящие двузначные числа. Другими словами, требуется, чтобы до и после `pattern:\d\d` был символ, отличный от `\w` (или начало/конец строки)
Современный JavaScript также позволяет искать символы по их свойствам Юникода, например:
258
+
В кодировке Unicode, которую JavaScript использует для строк, каждому символу соответствует ряд свойств, например - какого языка это буква, является ли символ знаком пунктуации, и т.п.
259
+
260
+
Современный JavaScript позволяет использовать эти свойства в регулярном выражении для поиска, например:
259
261
260
262
- Кириллица: `pattern:\p{Script=Cyrillic}` или `pattern:\p{sc=Cyrillic}`.
261
263
- Тире (будь то короткое `-` или длинное тире `—`): `pattern:\p{Dash_Punctuation}` или `pattern:\p{pd}`.
262
-
-Валюта:`pattern:\p{Currency_Symbol}` или `pattern:\p{sc}`.
264
+
-Обозначение валюты, как например,`pattern:\p{Currency_Symbol}` или `pattern:\p{sc}`.
263
265
- ...И многое другое. Юникод имеет много категорий символов, которые мы можем выбрать.
264
266
265
267
Для работы этих шаблонов необходим флаг регулярного выражения `'u'`. Подробнее об этом в главе [](info:regexp-unicode).
0 commit comments