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

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

原始问题

我需要帮助验证ECMA-262 (第3版, 7.6) 标识符的有效字符(代码点)用于词法分析器。

语法引用

Identifier ::

  • IdentifierName但不是ReservedWord

IdentifierName ::

  • IdentifierStart
  • IdentifierName IdentifierPart
  • IdentifierStart ::
  • UnicodeLetter
  • $
  • _
  • \ UnicodeEscapeSequence #无需检查此项

IdentifierPart ::

  • IdentifierStart
  • UnicodeCombiningMark
  • UnicodeDigit
  • UnicodeConnectorPunctuation

UnicodeLetter ::

  • 任何一个Unicode类别的字符,“大写字母 (Lu)”,“小写字母 (Ll)”,“标题字母 (Lt)”,   “修饰符字母 (Lm)”,“其他字母 (Lo)”或“编号字母(Nl)”。

UnicodeCombiningMark ::

  • 任何一个Unicode类别的字符,“非间距标记 (Mn)”或“组合间距标记 (Mc)”

UnicodeDigit ::

  • 任何一个Unicode类别的字符,“十进制数字 (Nd)”

UnicodeConnectorPunctuation ::

  • 任何一个Unicode类别的字符,“连接器标点符号 (Pc)”

如你所见,它接受某些类别的任何字符。

我需要所有可能的字符,因此我的第一步是在Unicode 5.0 图表上定位“连接标点符号”,但没有找到匹配项,我认为我做错了。所以有人能帮我吗?

2个回答

5
Unicode提供了这个工具来确定字符集。它使用在[::]中包含属性值对的正则表达式。
如果想要所有Unicode 5中的字符,可以使用[:age=5.0:]
其余的是“一般类别”(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的属性,但它们不包括与您的规格相同的字符。 这里也有所有Unicode字符属性的概述。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接