如何从特定类别中获取所有 Unicode 字符?

How to get all Unicode characters from specific categories?

例如,如何从连接符标点符号 (Pc) 类别中获取代码点模式,例如 x-y\uxxxx\Uxxxxxxxxx,用于扫描 ECMAScript 3/JavaScript 标识符?

原问题

我需要帮助来验证词法扫描器的 ECMA-262(3º edition、7.6)标识符的有效字符(代码点)。

语法引用

Identifier ::

  • IdentifierName but not ReservedWord

IdentifierName ::

  • IdentifierStart
  • IdentifierName IdentifierPart
  • IdentifierStart ::
  • UnicodeLetter
  • $
  • _
  • \ UnicodeEscapeSequence # no need to check this

IdentifierPart ::

  • IdentifierStart
  • UnicodeCombiningMark
  • UnicodeDigit
  • UnicodeConnectorPunctuation

UnicodeLetter ::

  • any character in the Unicode categories “Uppercase letter (Lu)”, “Lowercase > letter (Ll)”, “Titlecase letter (Lt)”, “Modifier letter (Lm)”, “Other letter (Lo)”, or “Letter number (Nl)”.

UnicodeCombiningMark ::

  • any character in the Unicode categories “Non-spacing mark (Mn)” or “Combining spacing mark (Mc)”

UnicodeDigit ::

  • any character in the Unicode category “Decimal number (Nd)”

UnicodeConnectorPunctuation ::

  • any character in the Unicode category “Connector punctuation (Pc)”

如您所见,它接受特定类别的任何字符。

我需要所有这些可能的字符,所以我的第一步是在这个 Unicode 5.0 chart 上找到 "Connector punctuation",但是 0 个匹配,我相信我做错了.那么有人可以帮助我吗?

Unicode 提供 this tool 来确定字符集。它使用包含在 [::].

中的 属性-值对的正则表达式

对于您要执行的 Unicode 5 中的所有字符 [:age=5.0:]

其余为"general categories"(gc)。因此,例如 [:age=5.0:]&[:gc=Lu:] 将查找 Unicode 5 中的所有大写字母(gc=L 通常将查找所有字母)。

对于 IdentifierStart,您需要 [:age=5.0:]&[[:gc=L:][:gc=Nl:]$_]。对于 IdentifierPart,您需要 [:age=5.0:]&[[:gc=L:][:gc=Nl:][:gc=Mn:][:gc=Mc:][:gc=Nd:][:gc=Pc:]$_].

Unicode 也有称为 ID_Start 和 ID_Continue 的属性,但它们不包含与您的规范相同的字符。

Here也是所有Unicode字符属性的总览