商业源代码中的JSLint错误

时间:2014-03-26 17:16:53

标签: javascript jslint redactor

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)

2 个答案:

答案 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);

insecure carot

所以它不符合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