9

为什么 JSLint 在以下 JavaScript 行中返回“错误的转义”?

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

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

正则表达式以简洁和神秘的符号编写。JSLint 寻找可能导致可移植性问题的问题。它还尝试通过推荐显式擒纵机构来解决视觉上的歧义。

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

4

1 回答 1

13

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

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

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

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

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

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

param = param.replace(/(\[|\])/g,"\\$1");
于 2010-02-26T00:11:50.463 回答