Javascript jshint拒绝正则表达式-为什么?
我在别处看到过关于旧版本jshint拒绝有效正则表达式的帖子。是这样的,还是我的表情有问题?声称JavaScript引擎在完全unicode模式下没有问题 我也有同样的问题: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.
# 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)
见以下未决问题:
变通办法 将正则表达式转换为有效的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])/;