请考虑以下代码:
console.log(description);
var description = description.replace(/\\/g, "\\\\\\");
console.log(description);
考虑以下图片:
第一个有两个\\
,第二个有6.为什么字符串没有被转义?它应该是\\\
而不是\\\\\\
答案 0 :(得分:2)
您告诉它用3个斜杠/\\/
= \
替换单个斜杠(正则表达式:"\\\\\\"
= \\\
)。
因此当它看到一个文字\\n
时,它会用两个斜线替换每个斜线,每个斜线总共有6个斜杠。
您想要用3个斜杠替换2个斜杠吗?
将/\\\\/
用于正则表达式,如下所示:
description.replace(/\\\\/g, "\\\\\\");
因为反斜杠是正则表达式中的转义字符,因此每个双斜杠的原因代表编译的正则表达式中的单个斜杠。
答案 1 :(得分:2)
正则表达式/\\/g
匹配一个斜杠(\
),并且因为用三个斜杠替换每个斜杠,就会得到六个斜杠。
如果要用三个斜杠替换两个斜杠,请使用/\\\\/g
正则表达式,如下所示:
console.log(description);
description = description.replace(/\\\\/g, "\\\\\\");
console.log(description);
答案 2 :(得分:1)
您错误地认为结果文本中的6个斜杠是由一个匹配生成的并替换。它们是两次单独替换的结果。 这是因为你的正则表达式只查找一个斜杠,而不是两个斜杠。
虽然您在第二个参数中转义了反斜杠,但在第一个参数中没有这样做。
如果你的目标是用三个替换两个反斜杠,那么也要转义正则表达式中的反斜杠(第一个参数):
var description = description.replace(/\\\\/g, "\\\\\\");