reg在Chrome控制台中发现奇怪的反应

时间:2016-07-13 11:02:04

标签: javascript regex google-chrome

如以下regExp:

var reg = /(\.[\u4e00-\u9fa5A-Z_])+/i;
reg.test('.a.s');

只有Chrome变为false,其他浏览器和节点都会变为true。

enter image description here

那是因为Chrome regExp引擎吗?

由于@WiktorStribiżew的缩影,这个问题得到了解决。请参考他的回答。

=============================================== =======================

执行RegExp时,这可能是ES6的错误。有人在节点和chrome社区中报告了该问题。参考这些:

https://github.com/nodejs/node/issues/7708?plg_nld=1&plg_uin=1&plg_auth=1&plg_nld=1&plg_usr=1&plg_vkey=1&plg_dev=1

https://bugs.chromium.org/p/v8/issues/detail?id=5199

2 个答案:

答案 0 :(得分:3)

最新的Chrome版本在符合ES6标准的V8上运行。

因此,\u9fa5A被视为一个代码点,而不是\u9fa5A,请参阅此测试:



 // Chorme 51.0.2704.103 m output is given on the right
console.log(
  String.fromCharCode(parseInt("4e00", 16)), //  => "一"
  String.fromCharCode(parseInt("9fa5A", 16)), // => "署"
  String.fromCharCode(parseInt("9fa5", 16)) //  =>  "龥"
);




您需要确保使用\u表示法和\u{XXXX}修饰符正确解析/u值(仅适用于ES6)或重新排列字符类部分,如下所示:< / p>

&#13;
&#13;
console.log(/(\.[\u{4e00}-\u{9fa5}A-Z_])+/iu.test('.a.s'));
// or rearrange the ranges:
console.log(/(\.[A-Z_\u4e00-\u9fa5])+/i.test('.a.s'));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我已查看结果。我只有真正的结果。你有任何特定的版本或什么?

I am getting the true result only