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-unicode/article.md
+14-14Lines changed: 14 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,10 +1,10 @@
1
1
# Юнікод: прапорець "u" та клас \p{...}
2
2
3
-
У JavaScript для рядків використовується кодування [Юнікод](https://uk.wikipedia.org/wiki/Юнікод). Більшість символів кодуються 2 байтами, що дозволяє представити максимум 65536 символів.
3
+
У JavaScript для рядків використовується кодування [Юнікод](https://uk.wikipedia.org/wiki/Юнікод). Більшість символів кодуються 2-ма байтами, що дозволяє представити максимум 65536 символів.
4
4
5
-
Цей діапазон недостатньо великий для кодування всіх можливих символів, тому деякі рідкісні символи кодуються 4 байтами, наприклад `𝒳` (математичний X) або `😄` (смайл), деякі ієрогліфи тощо.
5
+
Цей діапазон недостатньо великий для кодування всіх можливих символів, тому деякі рідкісні символи кодуються 4-ма байтами, наприклад `𝒳` (математичний X) або `😄` (смайл), деякі ієрогліфи тощо.
6
6
7
-
Ось значення Юнікодів для деяких символів:
7
+
Ось Юнікод значення для деяких символів:
8
8
9
9
| Символ | Юнікод | Кількість байтів у Юнікоді |
10
10
|------------|---------|--------|
@@ -25,11 +25,11 @@ alert('😄'.length); // 2
25
25
alert('𝒳'.length); // 2
26
26
```
27
27
28
-
...Але ми бачимо, що лише один, правда ж? Річ у тому, що властивість `length` трактує 4 байти, як два символи по 2 байти. Це не правильно, адже їх необхідно розглядати тільки разом (так звана "сурогатна пара", детальніше у розділі <info:string>).
28
+
...Але ми бачимо, що лише один, правда ж? Річ у тому, що властивість `length` трактує 4 байти, як два символи по 2 байти. Це неправильно, адже їх необхідно розглядати тільки разом (так звана "сурогатна пара", детальніше у розділі <info:string>).
29
29
30
-
За замовчуванням регулярні вирази також розглядають 4-байтові "довгі символи" як пару 2-байтових. Як і у випадку з рядками, це може призвести до дивних результатів. Ми побачимо це трохи пізніше, у розділі <info:regexp-character-sets-and-ranges>.
30
+
Типово регулярні вирази також розглядають 4-байтові "довгі символи" як пару 2-байтових. Як і у випадку з рядками, це може призвести до дивних результатів. Ми побачимо це трохи пізніше, у розділі <info:regexp-character-sets-and-ranges>.
31
31
32
-
На відміну від рядків, регулярні вирази мають прапорець `pattern:u`, який виправляє такі проблеми. З таким прапорцем регулярний вираз правильно обробляє 4-байтові символи. А також стає доступним пошук з використанням властивостей Юнікоду, який ми розглянемо далі.
32
+
На відміну від рядків, регулярні вирази мають прапорець `pattern:u`, який виправляє такі проблеми. З таким прапорцем регулярний вираз правильно обробляє 4-байтові символи. Ба більше, стає доступним пошук з використанням властивостей Юнікоду, який ми розглянемо далі.
33
33
34
34
## Властивості Юнікоду \p{...}
35
35
@@ -41,7 +41,7 @@ alert('𝒳'.length); // 2
41
41
42
42
Наприклад, `\p{Letter}` позначає літеру будь-якою мовою. Ми також можемо використовувати коротший запис `\p{L}`, оскільки `L` є псевдонімом `Letter`. Майже для кожної властивості існують варіанти коротшого запису.
43
43
44
-
У наведеному нижче прикладі буде знайдено три види літер: англійська, грузинська та корейська.
44
+
У наведеному нижче прикладі ми будемо шукати три види літер: англійську, грузинську та корейську.
45
45
46
46
```js run
47
47
let str ="A ბ ㄱ";
@@ -91,14 +91,14 @@ alert( str.match(/\p{L}/g) ); // null (немає збігів, \p не прац
91
91
- сурогат `Cs`.
92
92
93
93
94
-
Наприклад, якщо нам потрібно знайти маленькі літери, ми можемо написати `pattern:\p{Ll}`, знаки пунктуації `pattern:\p{P}`і так далі.
94
+
Наприклад, якщо нам потрібно знайти маленькі літери, ми можемо написати `pattern:\p{Ll}`, знаки пунктуації `pattern:\p{P}`тощо.
95
95
96
96
Існують також інші похідні категорії, наприклад:
97
97
-`Alphabetic` (`Alpha`), містить в собі літери `L`, а також числа позначені за допомогою літер `Nl` (наприклад, Ⅻ - символ для римської цифри 12), і деякі інші символи `Other_Alphabetic` (`OAlpha`).
98
98
-`Hex_Digit` містить шістнадцяткові числа: `0-9`, `a-f`.
99
-
- ...І так далі.
99
+
- ...тощо.
100
100
101
-
Юнікод підтримує велику кількість властивостей, і їхній повний перелік вимагав би дуже багато місця, тому ось посилання:
101
+
Юнікод підтримує велику кількість властивостей, і їхній повний перелік зайняв би дуже багато місця, тому ось посилання:
102
102
103
103
- Перелік усіх властивостей за символом: <https://unicode.org/cldr/utility/character.jsp>.
104
104
- Перелік усіх символів за властивістю: <https://unicode.org/cldr/utility/list-unicodeset.jsp>.
@@ -107,7 +107,7 @@ alert( str.match(/\p{L}/g) ); // null (немає збігів, \p не прац
107
107
108
108
### Приклад: шістнадцяткові числа
109
109
110
-
Наприклад, пошукаймо шістнадцяткові числа, записані в форматі `xFF`, де замість `F` може бути будь-яка шістнадцяткова цифра (0..9 or A..F).
110
+
Наприклад, знайдемо шістнадцяткові числа, записані в форматі `xFF`, де замість `F` може бути будь-яка шістнадцяткова цифра (0..9 or A..F).
111
111
112
112
Шістнадцяткову цифру можна позначити як `pattern:\p{Hex_Digit}`:
Нам допоможе властивість Юнікоду -- `Script` (система письма), яка може мати значення: `Cyrillic`(Кирилиця), `Greek` (Грецька), `Arabic` (Арабська), `Han` (Китайська) та інші, [тут повний перелік](https://en.wikipedia.org/wiki/Script_(Unicode)).
125
125
126
-
Для пошуку символів у певній системі письма ми повинні використати`pattern:Script=<value>`, наприклад для літер кирилиці: `pattern:\p{sc=Cyrillic}`, для китайських ієрогліфів: `pattern:\p{sc=Han}`, і так далі.
126
+
Для пошуку символів у певній системі письма ми повинні використовувати`pattern:Script=<value>`, наприклад для літер кирилиці: `pattern:\p{sc=Cyrillic}`, для китайських ієрогліфів: `pattern:\p{sc=Han}` тощо.
127
127
128
128
```js run
129
129
let regexp =/\p{sc=Han}/gu; // поверне китайські ієрогліфи
0 commit comments