如以下regExp:
var reg = /(\.[\u4e00-\u9fa5A-Z_])+/i;
reg.test('.a.s');
只有Chrome变为false,其他浏览器和节点都会变为true。
那是因为Chrome regExp引擎吗?
由于@WiktorStribiżew的缩影,这个问题得到了解决。请参考他的回答。
=============================================== =======================
执行RegExp时,这可能是ES6的错误。有人在节点和chrome社区中报告了该问题。参考这些:
答案 0 :(得分:3)
最新的Chrome版本在符合ES6标准的V8上运行。
因此,\u9fa5A
被视为一个代码点,而不是\u9fa5
和A
,请参阅此测试:
// 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>
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;
答案 1 :(得分:0)