Skip to content

Commit 271b96b

Browse files
authored
Merge pull request #172 from nglazov/9-regular-expressions/21-regexp-unicode-properties
9-regular-expressions/21-regexp-unicode-properties
2 parents 28203a2 + df08223 commit 271b96b

1 file changed

Lines changed: 43 additions & 43 deletions

File tree

  • 9-regular-expressions/21-regexp-unicode-properties

9-regular-expressions/21-regexp-unicode-properties/article.md

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,81 @@
11

2-
# Unicode character properties \p
2+
# Unicode-свойства символов \p
33

4-
[Unicode](https://en.wikipedia.org/wiki/Unicode), the encoding format used by JavaScript strings, has a lot of properties for different characters (or, technically, code points). They describe which "categories" character belongs to, and a variety of technical details.
4+
[Юникод](https://ru.wikipedia.org/wiki/Юникод), формат кодировки строк, используемый в JavaScript, имеет множество свойств для разных символов (или, технически, кодовых позиций). Они описывают к какой "категории" относится символ и прочие технические детали.
55

6-
In regular expressions these can be set by `\p{…}`. And there must be flag `'u'`.
6+
В регулярных выражениях свойства могут быть указаны с помощью `\p{…}`. Для таких регулярных выражений обязательно использовать флаг `'u'`.
77

8-
For instance, `\p{Letter}` denotes a letter in any of language. We can also use `\p{L}`, as `L` is an alias of `Letter`, there are shorter aliases for almost every property.
8+
Например, `\p{Letter}` обозначает букву в любом языке. Также можно использовать запись `\p{L}`, так как `L` - это псевдоним `Letter`, существуют короткие записи почти для всех свойств.
99

10-
Here's the main tree of properties:
10+
Вот основные категории свойств:
1111

12-
- Letter `L`:
13-
- lowercase `Ll`, modifier `Lm`, titlecase `Lt`, uppercase `Lu`, other `Lo`
14-
- Number `N`:
15-
- decimal digit `Nd`, letter number `Nl`, other `No`:
16-
- Punctuation `P`:
17-
- connector `Pc`, dash `Pd`, initial quote `Pi`, final quote `Pf`, open `Ps`, close `Pe`, other `Po`
18-
- Mark `M` (accents etc):
19-
- spacing combining `Mc`, enclosing `Me`, non-spacing `Mn`
20-
- Symbol `S`:
21-
- currency `Sc`, modifier `Sk`, math `Sm`, other `So`
22-
- Separator `Z`:
23-
- line `Zl`, paragraph `Zp`, space `Zs`
24-
- Other `C`:
25-
- control `Cc`, format `Cf`, not assigned `Cn`, private use `Co`, surrogate `Cs`.
12+
- Буквы `L`:
13+
- в нижнем регистре `Ll`, модификатор `Lm`, заглавные буквы `Lt`, в верхнем регистре `Lu`, прочие `Lo`
14+
- Число `N`:
15+
- десятичная цифра `Nd`, цифры обозначаемые буквами (римские) `Nl`, прочие `No`:
16+
- Знаки препинания `P`:
17+
- соединители `Pc`, тире `Pd`, открывающие кавычки `Pi`, закрывающие кавычки `Pf`, открывающие скобки `Ps`, закрывающие скобки `Pe`, прочее `Po`
18+
- Отметки `M` (например, акценты):
19+
- двоеточия `Mc`, вложения `Me`, апострофы `Mn`
20+
- Символы `S`:
21+
- валюты `Sc`, модификаторы `Sk`, математические `Sm`, прочие `So`
22+
- Разделители `Z`:
23+
- линия `Zl`, параграф `Zp`, пробел `Zs`
24+
- Прочие `C`:
25+
- контрольные `Cc`, форматирование `Cf`, не назначенные `Cn`, для приватного использования `Co`, суррогаты `Cs`.
2626

27-
```smart header="More information"
28-
Interested to see which characters belong to a property? There's a tool at <http://cldr.unicode.org/unicode-utilities/list-unicodeset> for that.
27+
```smart header="Дополнительная информация"
28+
Хотите узнать, какие символы имеют определенное свойство? Для этого есть инструмент: <http://cldr.unicode.org/unicode-utilities/list-unicodeset>.
2929
30-
You could also explore properties at [Character Property Index](http://unicode.org/cldr/utility/properties.jsp).
30+
Вы также можете изучить свойства в [каталоге свойств символа](http://unicode.org/cldr/utility/properties.jsp).
3131
32-
For the full Unicode Character Database in text format (along with all properties), see <https://www.unicode.org/Public/UCD/latest/ucd/>.
32+
Полная база Юникод-символов в текстовом формате (вместе со всеми свойствами), находится здесь <https://www.unicode.org/Public/UCD/latest/ucd/>.
3333
```
3434

35-
There are also other derived categories, like:
36-
- `Alphabetic` (`Alpha`), includes Letters `L`, plus letter numbers `Nl` (e.g. roman numbers Ⅻ), plus some other symbols `Other_Alphabetic` (`OAltpa`).
37-
- `Hex_Digit` includes hexadimal digits: `0-9`, `a-f`.
38-
- ...Unicode is a big beast, it includes a lot of properties.
35+
Есть и другие категории -- производные, например:
36+
- `Alphabetic` (`Alpha`), включающая в себя `L`, плюс "буквенные цифры", обозначаемые буквами `Nl` (например римские цифры: Ⅻ), и некоторые другие символы `Other_Alphabetic` (`OAltpa`).
37+
- `Hex_Digit` включает символы для шестнадцатеричных чисел: `0-9`, `a-f`.
38+
...Юникод поддерживает и много других свойств.
3939

40-
For instance, let's look for a 6-digit hex number:
40+
Например, давайте поищем шестизначные шестнадцатеричные числа:
4141

4242
```js run
43-
let reg = /\p{Hex_Digit}{6}/u; // flag 'u' is requireds
43+
let reg = /\p{Hex_Digit}{6}/u; // флаг 'u' -- обязательный
4444

4545
alert("color: #123ABC".match(reg)); // 123ABC
4646
```
4747

48-
There are also properties with a value. For instance, Unicode "Script" (a writing system) can be Cyrillic, Greek, Arabic, Han (Chinese) etc, the [list is long]("https://en.wikipedia.org/wiki/Script_(Unicode)").
48+
Существуют также свойства со значением. Например в Юникоде есть "Script" (система написания), которая может иметь значения Cyrillic (Кириллическая), Greek (Греческая), Arabic (Арабская), Han (Китайская) и так далее, [полный список -- длинный]("https://en.wikipedia.org/wiki/Script_(Unicode)").
4949

50-
To search for certain scripts, we should supply `Script=<value>`, e.g. to search for cyrillic letters: `\p{sc=Cyrillic}`, for Chinese glyphs: `\p{sc=Han}`, etc:
50+
Для поиска символов в нужной системе записи (в нужном "алфавите"), мы должны установить `Script=<value>`, например для поиска кириллических букв: `\p{sc=Cyrillic}`, для китайских иероглифов: `\p{sc=Han}`, и так далее:
5151

5252
```js run
53-
let regexp = /\p{sc=Han}+/gu; // get chinese words
53+
let regexp = /\p{sc=Han}+/gu; // вернет китайские слова
5454

5555
let str = `Hello Привет 你好 123_456`;
5656

5757
alert( str.match(regexp) ); // 你好
5858
```
5959

60-
## Building multi-language \w
60+
## Создание многоязычного \w
6161

62-
Let's make a "universal" regexp for `pattern:\w`, for any language. That task has a standard solution in many programming languages with unicode-aware regexps, e.g. Perl.
62+
Шаблон `pattern:\w` предназначен для поиска "символов для слов" (words), но является всего лишь сокращением для `pattern:[a-zA-Z0-9_]`, так что он не найдет китайские, русские слова и т.п.
63+
64+
Давайте сделаем универсальный шаблон, который ищет символы, используемые в словах, для любого языка. Это очень легко с Юникод-свойствами:
6365

6466
```js
6567
/[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]/u
6668
```
6769

68-
Let's decipher. Remember, `pattern:\w` is actually the same as `pattern:[a-zA-Z0-9_]`.
69-
70-
So the character set includes:
70+
Теперь расшифруем, то что получилось. По аналогии с классом `pattern:\w`, который является сокращением набора `pattern:[a-zA-Z0-9_]`, мы делаем свой набор, который включает в себя:
7171

72-
- `Alphabetic` for letters,
73-
- `Mark` for accents, as in Unicode accents may be represented by separate code points,
74-
- `Decimal_Number` for numbers,
75-
- `Connector_Punctuation` for the `'_'` character and alike,
76-
- `Join_Control` -– two special code points with hex codes `200c` and `200d`, used in ligatures e.g. in arabic.
72+
- `Alphabetic` для букв,
73+
- `Mark` для акцентов (в Юникоде акценты могут быть представлены разными кодовыми позициями),
74+
- `Decimal_Number` для цифр,
75+
- `Connector_Punctuation` для символа `'_'` и подобных ему,
76+
- `Join_Control` -– две специальные кодовые позиции с кодами `200c` и `200d`, используемые в лигатурах, например, арабских.
7777

78-
Or, if we replace long names with aliases (a list of aliases [here](https://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt)):
78+
Или, если заменить длинные названия псевдонимами (список псевдонимов [здесь](https://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt)):
7979

8080
```js run
8181
let regexp = /([\p{Alpha}\p{M}\p{Nd}\p{Pc}\p{Join_C}]+)/gu;

0 commit comments

Comments
 (0)