Javascript正则表达式与Unicode字符不一致

时间:2019-02-18 12:49:15

标签: javascript regex google-chrome unicode

我注意到Javascript正则表达式解析中的异常行为。

以下示例说明了此问题。

如果字符“ a”是通过其十六进制表示形式0x61(以Unicode \u61表示),则期望使用以下正则表达式进行匹配:

v‌‌ar a = String.fromCharCode(0x61) // "a"
a.match(/^[\u61]$/g) // does not match

不匹配。

奇怪的是,下面的表达式确实匹配:

a.match(/^[\u61-\u61]$/g) // does match!

注意:这可能是Chrome特定的Javascript错误。

1 个答案:

答案 0 :(得分:1)

解决方案:

使用四位数 Unicode标识符(包括冗余位)。

a.match(/^[\u0061]$/g) // matches

您还可以使用大括号表示法。如果匹配的5位或更多unicode,则需要大括号。请注意u标志,该标志启用花括号支持。

a.match(/^[\u{1f601}]$/ug)