Skip to content

Commit 14ad4be

Browse files
committed
Review: 03-regexp-unicode
1 parent 5117bcb commit 14ad4be

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

9-regular-expressions/03-regexp-unicode/article.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# Юнікод: прапорець "u" та клас \p{...}
22

3-
У JavaScript для рядків використовується кодування [Юнікод](https://uk.wikipedia.org/wiki/Юнікод). Більшість символів кодуються 2 байтами, що дозволяє представити максимум 65536 символів.
3+
У JavaScript для рядків використовується кодування [Юнікод](https://uk.wikipedia.org/wiki/Юнікод). Більшість символів кодуються 2-ма байтами, що дозволяє представити максимум 65536 символів.
44

5-
Цей діапазон недостатньо великий для кодування всіх можливих символів, тому деякі рідкісні символи кодуються 4 байтами, наприклад `𝒳` (математичний X) або `😄` (смайл), деякі ієрогліфи тощо.
5+
Цей діапазон недостатньо великий для кодування всіх можливих символів, тому деякі рідкісні символи кодуються 4-ма байтами, наприклад `𝒳` (математичний X) або `😄` (смайл), деякі ієрогліфи тощо.
66

7-
Ось значення Юнікодів для деяких символів:
7+
Ось Юнікод значення для деяких символів:
88

99
| Символ | Юнікод | Кількість байтів у Юнікоді |
1010
|------------|---------|--------|
@@ -25,11 +25,11 @@ alert('😄'.length); // 2
2525
alert('𝒳'.length); // 2
2626
```
2727

28-
...Але ми бачимо, що лише один, правда ж? Річ у тому, що властивість `length` трактує 4 байти, як два символи по 2 байти. Це не правильно, адже їх необхідно розглядати тільки разом (так звана "сурогатна пара", детальніше у розділі <info:string>).
28+
...Але ми бачимо, що лише один, правда ж? Річ у тому, що властивість `length` трактує 4 байти, як два символи по 2 байти. Це неправильно, адже їх необхідно розглядати тільки разом (так звана "сурогатна пара", детальніше у розділі <info:string>).
2929

30-
За замовчуванням регулярні вирази також розглядають 4-байтові "довгі символи" як пару 2-байтових. Як і у випадку з рядками, це може призвести до дивних результатів. Ми побачимо це трохи пізніше, у розділі <info:regexp-character-sets-and-ranges>.
30+
Типово регулярні вирази також розглядають 4-байтові "довгі символи" як пару 2-байтових. Як і у випадку з рядками, це може призвести до дивних результатів. Ми побачимо це трохи пізніше, у розділі <info:regexp-character-sets-and-ranges>.
3131

32-
На відміну від рядків, регулярні вирази мають прапорець `pattern:u`, який виправляє такі проблеми. З таким прапорцем регулярний вираз правильно обробляє 4-байтові символи. А також стає доступним пошук з використанням властивостей Юнікоду, який ми розглянемо далі.
32+
На відміну від рядків, регулярні вирази мають прапорець `pattern:u`, який виправляє такі проблеми. З таким прапорцем регулярний вираз правильно обробляє 4-байтові символи. Ба більше, стає доступним пошук з використанням властивостей Юнікоду, який ми розглянемо далі.
3333

3434
## Властивості Юнікоду \p{...}
3535

@@ -41,7 +41,7 @@ alert('𝒳'.length); // 2
4141

4242
Наприклад, `\p{Letter}` позначає літеру будь-якою мовою. Ми також можемо використовувати коротший запис `\p{L}`, оскільки `L` є псевдонімом `Letter`. Майже для кожної властивості існують варіанти коротшого запису.
4343

44-
У наведеному нижче прикладі буде знайдено три види літер: англійська, грузинська та корейська.
44+
У наведеному нижче прикладі ми будемо шукати три види літер: англійську, грузинську та корейську.
4545

4646
```js run
4747
let str = "A ბ ㄱ";
@@ -91,14 +91,14 @@ alert( str.match(/\p{L}/g) ); // null (немає збігів, \p не прац
9191
- сурогат `Cs`.
9292

9393

94-
Наприклад, якщо нам потрібно знайти маленькі літери, ми можемо написати `pattern:\p{Ll}`, знаки пунктуації `pattern:\p{P}` і так далі.
94+
Наприклад, якщо нам потрібно знайти маленькі літери, ми можемо написати `pattern:\p{Ll}`, знаки пунктуації `pattern:\p{P}` тощо.
9595

9696
Існують також інші похідні категорії, наприклад:
9797
- `Alphabetic` (`Alpha`), містить в собі літери `L`, а також числа позначені за допомогою літер `Nl` (наприклад, Ⅻ - символ для римської цифри 12), і деякі інші символи `Other_Alphabetic` (`OAlpha`).
9898
- `Hex_Digit` містить шістнадцяткові числа: `0-9`, `a-f`.
99-
- ...І так далі.
99+
- ...тощо.
100100

101-
Юнікод підтримує велику кількість властивостей, і їхній повний перелік вимагав би дуже багато місця, тому ось посилання:
101+
Юнікод підтримує велику кількість властивостей, і їхній повний перелік зайняв би дуже багато місця, тому ось посилання:
102102

103103
- Перелік усіх властивостей за символом: <https://unicode.org/cldr/utility/character.jsp>.
104104
- Перелік усіх символів за властивістю: <https://unicode.org/cldr/utility/list-unicodeset.jsp>.
@@ -107,7 +107,7 @@ alert( str.match(/\p{L}/g) ); // null (немає збігів, \p не прац
107107

108108
### Приклад: шістнадцяткові числа
109109

110-
Наприклад, пошукаймо шістнадцяткові числа, записані в форматі `xFF`, де замість `F` може бути будь-яка шістнадцяткова цифра (0..9 or A..F).
110+
Наприклад, знайдемо шістнадцяткові числа, записані в форматі `xFF`, де замість `F` може бути будь-яка шістнадцяткова цифра (0..9 or A..F).
111111

112112
Шістнадцяткову цифру можна позначити як `pattern:\p{Hex_Digit}`:
113113

@@ -119,11 +119,11 @@ alert("число: xAF".match(regexp)); // xAF
119119

120120
### Приклад: китайські ієрогліфи
121121

122-
Пошукаймо китайські ієрогліфи.
122+
Знайдемо китайські ієрогліфи.
123123

124124
Нам допоможе властивість Юнікоду -- `Script` (система письма), яка може мати значення: `Cyrillic`(Кирилиця), `Greek` (Грецька), `Arabic` (Арабська), `Han` (Китайська) та інші, [тут повний перелік](https://en.wikipedia.org/wiki/Script_(Unicode)).
125125

126-
Для пошуку символів у певній системі письма ми повинні використати `pattern:Script=<value>`, наприклад для літер кирилиці: `pattern:\p{sc=Cyrillic}`, для китайських ієрогліфів: `pattern:\p{sc=Han}`, і так далі.
126+
Для пошуку символів у певній системі письма ми повинні використовувати `pattern:Script=<value>`, наприклад для літер кирилиці: `pattern:\p{sc=Cyrillic}`, для китайських ієрогліфів: `pattern:\p{sc=Han}` тощо.
127127

128128
```js run
129129
let regexp = /\p{sc=Han}/gu; // поверне китайські ієрогліфи
@@ -137,7 +137,7 @@ alert( str.match(regexp) ); // 你,好
137137

138138
Символи, які позначають валюту, такі як `$`, ``, `¥`, мають властивість `pattern:\p{Currency_Symbol}`, короткий псевдонім: `pattern:\p{Sc}`.
139139

140-
Використаємо його для пошуку цін у форматі «валюта, за якою йде цифра»:
140+
Використаємо його для пошуку цін у форматі "валюта, за якою йде цифра":
141141

142142
```js run
143143
let regexp = /\p{Sc}\d/gu;

0 commit comments

Comments
 (0)