Unicode je tak zajímavé téma a mám pocit, že každý den lze objevovat nové věci. Dnes byl jeden z těchto dnů. Četl jsem příspěvek na blogu a narazil jsem na u
vlajka. Neviděl jsem tento příznak regulárního výrazu a zjistil jsem, že čtu Axelovu kapitolu v "Prozkoumávání ES6" na toto téma.
Takže co je to u
vlajka?
V JavaScriptu máme „problém“, že řetězce jsou reprezentovány v UTF-16, což znamená, že ne každý znak může být reprezentován jednou kódovou jednotkou. Toto chování vede k podivnému length
vlastnosti určitých řetězců, a to se stává složitější, když se zabýváte náhradními páry.
Stručně řečeno:náhradní páry jsou dvě jednotky kódu Unicode představující jeden znak .
Pokud se chcete dozvědět více o Unicode nebo regulárních výrazech v JavaScriptu, podívejte se na tyto dvě přednášky:
- Regulární výrazy – moje tajná láska...
- Unicode, JavaScript a rodina Emoji
Pokud by tečka (
) v regulárních výrazech (
) odpovídá znaku, který potřebuje dvě kódové jednotky? Zde je u
vlajka přichází do hry.
Podívejme se na příklad:
const emoji = '\u{1F60A}'; // "smiling face with smiling eyes" / "😊"
emoji.length // 2 -> it's a surrogate pair
/^.$/.test(emoji) // false
/^.$/u.test(emoji) // true
Režim unicode (//u
) umožňuje použití sekvencí escape bodu kódu (\u{1F42A}
) v regulárních výrazech a pomáhají při práci s náhradními páry.
const emoji = '\u{1F42A}'; // "🐪"
/\u{1F42A}/.test(emoji); // false
/\uD83D\uDC2A/.test(camel); // true
/\u{1F42A}/u.test(emoji); // true
Režim Unicode pomáhá vypořádat se s Unicode v regulárních výrazech. Pokud se chcete dozvědět více, přečtěte si kapitolu Axelovy knihy nebo článek Mathiase Bynense na toto téma. Bavte se!