为什么JSLint在以下JavaScript行上返回“Bad escapement”?
param = param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
从JSLint文档中我认为这是可以的,因为正则表达式文字前面有一个括号:
正则表达式用 简洁而神秘的符号。 JSLint的 寻找可能导致的问题 便携性问题。它也尝试 解决视觉模糊问题 推荐明确的擒纵机构。
JavaScript的常规语法 表达式文字重载/ 字符。为了避免歧义,JSLint 期望前面的字符 正则表达式文字是一个(或= 或者:或者,角色。
答案 0 :(得分:13)
这不是它正在抱怨的正则表达式。您正在转义根本不需要转义的替换字符串中的字符。
[和]字符在普通字符串中没有特殊含义,您不必转义它们:
param = param.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");
注意:正如Anon指出的那样,您不需要为单个字符使用字符集:
param = param.replace(/\[/,"\\[").replace(/\]/,"\\]");
您还可以在单个正则表达式中匹配两个字符,捕获匹配的内容并在替换中使用。如果要替换超过第一次出现的次数,则需要使用全局选项:
param = param.replace(/(\[|\])/g,"\\$1");