6条斜线没有被逃脱...是怎么回事

时间:2015-11-20 21:41:02

标签: javascript regex replace

请考虑以下代码:

  console.log(description);
  var description = description.replace(/\\/g, "\\\\\\");
  console.log(description);

考虑以下图片:

enter image description here

第一个有两个\\,第二个有6.为什么字符串没有被转义?它应该是\\\而不是\\\\\\

3 个答案:

答案 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, "\\\\\\");