Перейти к содержимому

Понимание Unicode в JavaScript: флаги и классы

Введение в Unicode

JavaScript поддерживает Unicode — стандарт кодирования символов, который позволяет представлять текст на множестве языков и письменностей. Unicode необходим для разработки интернационализированных приложений и эффективной работы с разнообразными текстовыми данными. В этой главе мы рассмотрим Unicode флаги и классы в JavaScript, изучим их применение и приведём практические примеры для лучшего понимания.

Флаг Unicode u

Флаг u включает полное сопоставление Unicode в регулярных выражениях. При использовании этого флага JavaScript обрабатывает шаблон как учитывающий Unicode, что позволяет распознавать символы за пределами Базового многоязычного пространства (BMP). Этот флаг особенно полезен при работе с символами, такими как эмодзи, которые находятся вне BMP.

Использование флага u


Output appears here after Run.

В этом примере \uD83D\uDC4D представляет собой символ Unicode. Без флага u регулярное выражение a.b не распознаёт символ корректно и не находит совпадения. С флагом u регулярное выражение правильно сопоставляет последовательность, распознавая символ Unicode.

Комбинирование флага u с другими флагами


Output appears here after Run.

Этот пример демонстрирует комбинирование флага u с глобальным (g) и регистронезависимым (i) флагами. Регулярное выражение корректно находит совпадение для A\uD83D\uDC4Db, показывая, как флаг u можно использовать вместе с другими флагами для более гибкого сопоставления.

Экранирование свойств Unicode: \p{} и \P{}

Экранирование свойств Unicode предоставляет способ сопоставления символов на основе их свойств Unicode. Эта функция, появившаяся в ECMAScript 2018, упрощает работу с определёнными типами символов.

Синтаксис экранирования свойств Unicode

  • \p{Property=Value}: Сопоставляет символы с указанным свойством.
  • \P{Property=Value}: Сопоставляет символы без указанного свойства.

Распространённые свойства Unicode

  1. Общая категория (General Category): Сопоставляет символы на основе их общей категории.
    • \p{L}: Сопоставляет любую букву.
    • \p{N}: Сопоставляет любую цифру.
  2. Письменность (Script): Сопоставляет символы на основе их письменности.
    • \p{Script=Greek}: Сопоставляет греческие символы.
    • \p{Script=Han}: Сопоставляет символы хань (китайские, японские, корейские).

Примеры экранирования свойств Unicode


Output appears here after Run.

Здесь \p{L} сопоставляет любую букву. Регулярное выражение \p{L}+ находит все последовательности букв в строке 'Hello123', возвращая ["Hello"].


Output appears here after Run.

В этом примере \p{N} сопоставляет любую цифру. Регулярное выражение \p{N}+ извлекает все последовательности цифр из строки 'Hello123', в результате чего получается ["123"].


Output appears here after Run.

В этом примере используется \p{Script=Greek} для сопоставления греческих символов. Регулярное выражение успешно находит совпадение для греческой строки 'αβγδε'.

WARNING

Использование экранирования свойств Unicode может влиять на производительность, особенно при работе с большими объёмами текстовых данных. Оптимизируйте свои регулярные выражения и тестируйте их производительность в вашем конкретном случае использования.

Практическое применение

Валидация пользовательского ввода

Экранирование свойств Unicode позволяет более точно проверять пользовательский ввод, гарантируя, что принимаются только разрешённые символы.


Output appears here after Run.

Это регулярное выражение гарантирует, что допустимое имя пользователя начинается как минимум с двух букв, за которыми следует любая комбинация букв и цифр. 'User123' проходит валидацию, а '123User' — нет.

Извлечение определённых символов

Вы можете извлекать определённые типы символов из строки, используя экранирование свойств Unicode.


Output appears here after Run.

В этом примере \p{L}+ сопоставляет все последовательности букв в строке 'Hello, κόσμε!', возвращая ["Hello", "κόσμε"].

INFO

Всегда используйте флаг u с экранированием свойств Unicode

При использовании экранирования свойств Unicode всегда включайте флаг u, чтобы обеспечить корректное сопоставление. Без этого флага экранирование свойств вызовет SyntaxError.


Output appears here after Run.

Заключение

Понимание и использование Unicode в JavaScript имеет решающее значение для разработки надёжных интернационализированных приложений. Используя флаг u и экранирование свойств Unicode, вы сможете более эффективно обрабатывать разнообразные текстовые данные и выполнять точное сопоставление символов. Внедряйте эти техники в свои проекты, чтобы повысить их функциональность и обеспечить соответствие глобальным стандартам.

Практика

Что изменяет флаг 'u' в регулярных выражениях JavaScript?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.