如何在JavaScript中转义反斜杠?

15

我想用安全的\替代符号'\'。

但是当我尝试将代码应用于替换 '\' 时,它会替换所有'#'并失败。

el = el.replace(/\#/g, '#'); // replaces all '#' //that's cool
el = el.replace(/\\/g, '\'); // replaces all '\' //that's failing
为什么?

你发布的代码运行得很好。你确定 el 包含 '\' 字符吗? - zzzzBov
你能给我们提供一个测试用例吗?在简单的测试用例上,它似乎对我有效。 - Akshet
看一下:http://pastebin.com/t27vmCzs - Szymon Toda
1
在那个脚本中,您已经使用了encodeURIComponent(),它会将任何反斜杠替换为%5C。我认为您不需要进行两次手动替换。 - Wolfgang Stengel
1
FYI # 不需要转义; el.replace(/#/g, '#') 应该可以工作。而且你的替换反斜杠的代码在这里也可以正常工作。 - NullUserException
2个回答

19

打开控制台并输入

'\'.replace(/\\/g, '\'); 

出现错误的原因是字符串中的斜杠并不是真正存在于该字符串中,而是用于转义。

'\\'.replace(/\\/g, '\');

这段代码有效是因为它只需要一个斜杠并找到它。

你的正则表达式有效。


1
那么你如何处理“domain\user”呢?您需要先将单个反斜杠替换为双反斜杠,然后使用.replace(/\/g, '\')吗? - HaBo
/\\/g 查找单个反斜杠。我们从未将单个反斜杠替换为双反斜杠。第一个反斜杠转义了第二个反斜杠,因此这个正则表达式全局查找单个反斜杠。要处理 "domain\user",/\\/g 应该可以很好地工作。 - dansch

3

您可以使用 String.raw 来方便地在字符串字面量中添加斜杠。例如:String.raw`\a\bcd\e`.replace(/\\/g, '\');


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接