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

时间:2017-03-31 22:19:13

标签: javascript unicode ecmascript-3 ecmascript-4

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

原始问题

我需要帮助来验证词法扫描程序的ECMA-262(3º edition,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 chart,但0匹配,我相信我做错了。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

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

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

对于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的属性,但它们不包含与您的规范相同的字符。

Here也是所有Unicode字符属性的概述。