【问题标题】:Prepend backslash to selected characters with regex [duplicate]使用正则表达式在选定字符前添加反斜杠 [重复]
【发布时间】:2013-06-18 19:03:16
【问题描述】:

我现在使用的代码很丑,因为我必须为每个特殊字符单独写“替换”。

var str = ":''>";
str.replace("'","\\'").replace(">","\\>");

我想通过正则表达式在 * ( ) 和 ?​​strong> 前添加反斜杠。

【问题讨论】:

  • 你可以使用类似str = str.replace(/([<>*()?])/g, "\\$1");

标签: javascript regex


【解决方案1】:

使用将字符与字符集匹配的正则表达式,您可以尝试:

str = str.replace(/([<>*()?])/g, "\\$1");

演示: http://jsfiddle.net/8ar3Z/

它匹配[ ] 中的任何字符(您指定的字符),用周围的() 捕获它们(以便在替换的文本部分中可以将其引用为$1),然后以\\ 开头。


更新:

作为先生的建议。 @T.J.Crowder,不用()捕获,把$1改成$&amp;,写成:

str = str.replace(/[<>*()?]/g, "\\$&");

演示: http://jsfiddle.net/8ar3Z/1/


参考资料:

【讨论】:

  • +1(事实上,我是你的第一个支持者!),但你不需要捕获组:str = str.replace(/[&lt;&gt;*()?]/g, "\\$&amp;");
  • @T.J.Crowder 嗯,很有趣。我从未偏离过$n,所以我没有意识到$&amp; 会这样工作。谢谢,我会更新的!哇,你应该因为第一而获得奖励,当然...... :)
  • @Ian:不像捕获组在做任何伤害。 :-) 但是对于没有...的新手来说,它可能稍微更简单
  • @T.J.Crowder 你是绝对正确的!包含/解释这两个版本并没有什么坏处。只是为了确保我理解,如果您试图在同一个正则表达式中捕获两个不同的东西,您需要使用$1 和$2(使用( )),对吗?我只是想确保我没有考虑过这个错误
  • @Ian:是的,$&amp; 是 整个 匹配的子字符串(如果您使用过它们,包括任何捕获)。例如:"123 456".replace(/\d(\d)?\d/g, "$&amp; [$1]") 给你"123 [2] 456 [5]" 因为$&amp; 是整个匹配("123" 第一次,然后"456" 第二次)和$1 是捕获组("2" 和@ 987654350@).
猜你喜欢
  • 1970-01-01
  • 2017-07-10
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 2015-07-14
相关资源
最近更新 更多