【问题标题】:How to escape backslash in JavaScript?如何在 JavaScript 中转义反斜杠?
【发布时间】:2012-10-03 16:55:59
【问题描述】:

我想用安全的\ 替换反斜杠 => '\'。

但我的代码在申请替换“\”时替换所有“#”失败:

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

为什么?

【问题讨论】:

  • 您发布的代码运行良好。你确定el 包含'\' 字符吗?
  • 你能给我们一个失败的测试用例吗,在一个简单的测试用例上似乎对我有用。
  • 嗯看看:pastebin.com/t27vmCzs
  • 在该脚本中,您已经使用了 encodeURIComponent(),它将任何反斜杠替换为 %5C。我认为你不需要这两个手动替换。
  • 仅供参考 # 不需要转义; el.replace(/#/g, '#') 应该可以工作。而且您替换反斜杠的代码在这里也可以正常工作。

标签: javascript regex


【解决方案1】:

打开控制台并输入

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

失败,因为字符串中的斜杠实际上不在字符串中,它正在转义 '

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

有效,因为它需要一个斜线并找到它。

您的正则表达式有效。

【讨论】:

  • 那么你如何处理“域\用户”呢?您必须首先将单个反斜杠替换为双倍,然后使用 .replace(/\\/g, '\'); ?
  • /\\/g 查找单个反斜杠。我们绝不会用双打取代单打。第一个反斜杠转义了第二个反斜杠,因此这个正则表达式在全局范围内查找单个反斜杠。要处理“域\用户”,/\\/g 应该可以正常工作。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2011-10-02
    • 2015-07-28
    相关资源
    最近更新 更多