JS lint在商业源代码中给出以下错误(因此在所有浏览器上测试的代码没有问题)。有没有办法通过编辑代码来抑制此警告?如果可能的话,我宁愿不升级jslint。
**** redactor/redactor917.js ****
redactor917.js
/var/moteevate/js/redactor/redactor917.js(1471): SyntaxError: unterminated character class ^
if (current.remove && current.nodeType === 3 && current.nodeValue.match(/[^/\u200B]/g) == null)
........................................................................................................^
1 error(s), 0 warning(s)
答案 0 :(得分:3)
有趣的正则表达式。如果我正确阅读,看起来如果您要删除,并且您的nodeType为3,并且您的nodeValue 不是组成(匹配为{{1 }})任何不零宽度空间的任何东西,取分支。
正如blueberryfields所暗示的那样,问题确实无法逃避null
。 ^
很好。当它在括号内时,它只是一个正则表达式而不是运算符。
这里的问题是,Crockford(JSLint的作者和维护者)并不希望你说出不应该匹配正则表达式(在这里,你和& #39;重新寻找不零宽度空间的所有内容。
他希望你的正则表达式是具体的:相反,说出 应该有效的内容,以便你在设置否定案例时没有考虑的项目不会泄漏。这就是为什么您所看到的错误应为^
。这是不安全的,因为你可以让你没有想到的模式。
"我喜欢没有洋葱,酸菜或奶酪的汉堡包。"
"当然可以!在这里你好去"!
"但是它上面有机油!"
在这种情况下,或许这不是问题,但作为一般规则,不要太破旧。
虽然我认为这是一个有用的动机,因为它抓住了那个奇怪的"双倍而不是"来自原始正则表达式的逻辑,让我们不要担心我们现在是否同意这一点的优点,只是看看需要做些什么来解决它。 ; ^)
因此,如果我正确地做到这一点,那么当前正则表达式" nodeValue 不是由组成的任何内容构成不是零宽度空间"等于" nodeValue 是由零个或多个零宽度空格组成"。
为了使这个JSLint满意,然后重新排列regexp以检查字符串的开头和字符串结尾之间的"我们想要零个或多个零宽度空格。看起来像这样(fiddle)......
Insecure '^'.
是的,/*jslint browser: true, white:true, sloppy:true */
var current = {
remove: true,
nodeType: 3,
nodeValue: "\u200b\u200b\u200b"
};
if (current.remove && current.nodeType === 3
&& current.nodeValue.match(/^[\u200B]*$/g) !== null)
{
window.alert("YOU CAN DO IT");
}
也会给出一个匹配。
不可否认,我不知道最初是什么角色。关于here的好消息。
=============================================== ===============
编辑:回应OP的评论。
Bergi的编辑不应该通过JSLint。
所以试试这段代码:
"".match(/^[\u200B]*$/g);
所以它不符合JSLint。
但如果您的工具没有抱怨不安全的/*jslint browser: true, white:true, sloppy:true */
var current = {
remove: true,
nodeType: 3,
nodeValue: "\u200b\u200b\u200b"
};
if (current.remove && current.nodeType === 3
&& current.nodeValue.match(/[^\/\u200B]/g) === null) // with Bergi's edit.
{
window.alert("YOU CAN DO IT");
} else {
window.alert("you can't do");
}
,我不确定发生了什么。
答案 1 :(得分:2)
/[^/\u200B]/g
是一个包含斜杠的正则表达式,实际上是一个正则表达式文字分隔符,但是also valid inside a character class。但是,JSLint会将正则表达式解析为/[^/
,并声明该字符类未终止。
你应该逃避斜线:
/[^\/\u200B]/g