Javascript jshint拒绝正则表达式-为什么?

Javascript jshint拒绝正则表达式-为什么?,javascript,regex,unicode,ecmascript-6,jshint,Javascript,Regex,Unicode,Ecmascript 6,Jshint,我在别处看到过关于旧版本jshint拒绝有效正则表达式的帖子。是这样的,还是我的表情有问题?声称JavaScript引擎在完全unicode模式下没有问题 我也有同样的问题: # cat test.js function foo() { var bmp = /^[\u{0020}-\u{007e}\u{00A0}-\u{FFFF}]+$/u; } # jshint test.js test.js: line 2, col 15, Invalid regular expression.

我在别处看到过关于旧版本jshint拒绝有效正则表达式的帖子。是这样的,还是我的表情有问题?声称JavaScript引擎在完全unicode模式下没有问题

我也有同样的问题:

# cat test.js
function foo() {
    var bmp = /^[\u{0020}-\u{007e}\u{00A0}-\u{FFFF}]+$/u;
}

# jshint test.js
test.js: line 2, col 15, Invalid regular expression.
test.js: line 2, col 56, Missing semicolon.
test.js: line 2, col 56, Expected an assignment or function call and instead saw an expression.

3 errors

# jshint -v
jshint v2.9.5

对于奖励积分,如果这是jshint限制,我可以告诉它忽略这一行吗?我对构建环境的控制不足,无法升级到更高版本的jshint。

确实,jshint不支持ES6的Unicode感知正则表达式(或者更一般地说,
\u{..}
文本)(在撰写本文时,最新版本是v2.9.5)

见以下未决问题:

因此,这是行不通的。我不知道您是否可以在不破坏语法分析器的情况下抑制这一行的检查

然而,事实证明,您的一些目标浏览器(IE10和IE11)也不支持这些功能,因此这一点是没有意义的


变通办法 将正则表达式转换为有效的ES5(使用、或),结果如下:

var combine = /[\u{0020}-\u{007e}\u{00A0}-\u{0300}\u{036F}-\u{1AB0}\u{1AFF}-\u{1DC0}\u{1DCF}-\u{20D0}\u{20FF}-\u{FE20}\u{FE2F}-\u{FFFF}]/u;
以及:


正确性尚未完全确定,但我没有理由怀疑该工具。

清楚地显示了模式中虚线的错误。可能jshint不理解unicode修饰符吗?@JeffreyWesterkamp,你忘了
u
修饰符。嗯,刚刚发现
/u
在ECMAScript 6中是新的吗?因此,考虑到我的目标平台,我有比拒绝jshint更大的问题。@ctwheels:这实际上意味着一些不同的东西(请参阅了解
\u{nnnn}
的含义)。尽管这次没有第一条错误消息,但它仍然失败了。您在谈论什么更大的问题?
var bmp = /^(?:[ -~\xA0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+$/;
var combine = /(?:[ -~\xA0-\u0300\u036F-\u1AB0\u1AFF-\u1DC0\u1DCF-\u20D0\u20FF-\uD7FF\uE000-\uFE20\uFE2F-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/;