为什么JSLint在这行代码中返回'bad escapement'?

时间:2010-02-26 00:00:14

标签: javascript regex jslint

为什么JSLint在以下JavaScript行上返回“Bad escapement”?

param = param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");

从JSLint文档中我认为这是可以的,因为正则表达式文字前面有一个括号:

  

正则表达式用   简洁而神秘的符号。 JSLint的   寻找可能导致的问题   便携性问题。它也尝试   解决视觉模糊问题   推荐明确的擒纵机构。

     

JavaScript的常规语法   表达式文字重载/   字符。为了避免歧义,JSLint   期望前面的字符   正则表达式文字是一个(或=   或者:或者,角色。

1 个答案:

答案 0 :(得分:13)

这不是它正在抱怨的正则表达式。您正在转义根本不需要转义的替换字符串中的字符。

[和]字符在普通字符串中没有特殊含义,您不必转义它们:

param = param.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");

注意:正如Anon指出的那样,您不需要为单个字符使用字符集:

param = param.replace(/\[/,"\\[").replace(/\]/,"\\]");

您还可以在单​​个正则表达式中匹配两个字符,捕获匹配的内容并在替换中使用。如果要替换超过第一次出现的次数,则需要使用全局选项:

param = param.replace(/(\[|\])/g,"\\$1");