【问题标题】:Javascript regex not matching consistently with unicode characters [duplicate]Javascript正则表达式与Unicode字符不一致[重复]
【发布时间】:2019-02-18 12:49:15
【问题描述】:

我注意到 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 错误。

【问题讨论】:

  • 为什么不使用\x61?请注意,对于 ES6+,您还可以使用 a.match(/^\u{61}$/u)

标签: javascript regex google-chrome unicode


【解决方案1】:

解决方案:

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

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

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

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

【讨论】:

  • 这仍然无法捕获所有 unicode 字符.. 例如。 "?".match(/^\u1f60d/) 将不起作用。但是"?".match(/^\u{1f60d}/u) 可以。
  • 谢谢,我更新了我的解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多