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

SBU*_*OLD 9 javascript regex jslint

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

param = param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
Run Code Online (Sandbox Code Playgroud)

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

正则表达式用简洁而神秘的表示法编写.JSLint查找可能导致可移植性问题的问题.它还尝试通过推荐显式擒纵来解决视觉模糊.

JavaScript的正则表达式文字的语法会重载/字符.为避免歧义,JSLint期望正则表达式文字前面的字符是(或=或:或字符).

Guf*_*ffa 13

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

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

param = param.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");
Run Code Online (Sandbox Code Playgroud)

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

param = param.replace(/\[/,"\\[").replace(/\]/,"\\]");
Run Code Online (Sandbox Code Playgroud)

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

param = param.replace(/(\[|\])/g,"\\$1");
Run Code Online (Sandbox Code Playgroud)