Regulární výrazy JavaScriptu mají režim Unicode

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!