【问题标题】:How to escape JavaScript RegEx replacement characters? [duplicate]如何转义 JavaScript RegEx 替换字符? [复制]
【发布时间】:2016-06-27 01:59:27
【问题描述】:

考虑下面的代码:

var my_string = "aicId";
var my_pattern = "i";
var my_regex = new RegExp(my_pattern,"gi");
var my_result = my_string.replace(my_regex,"x$&y");
alert (my_result);

这将返回:

axiycxIyd

现在,如果我希望它返回这个怎么办:

ax$&ycx$&yd

我需要做什么?

我试图像这样逃避他们:

var my_result = my_string.replace(my_regex,"x\$\&y");

或者这个:

var my_result = my_string.replace(my_regex,"x\\$&y");

或者这个:

var my_result = my_string.replace(my_regex,"x$&y");

或者这个:

var dollar = '$';
var amper = '&';
var my_result = my_string.replace(my_regex,"x" + dollar.charCodeAt(0) + amper.charCodeAt(0) + "y");

我还能尝试什么?

【问题讨论】:

  • 我还能尝试什么?我不知道,阅读文档或搜索 SO 怎么样?
  • 谢谢你。你不必粗鲁。我花了两个小时阅读文档并搜索网络,包括 SO。有趣的是,您没有时间提供帮助,但有时间......谢天谢地,其他人更慷慨。
  • SO 与慷慨无关。如果您想要一个帮助论坛,让人们慷慨地帮助其他懒得做研究或阅读文档的人,那就去别处看看。 SO 是关于有趣的、经过充分研究的问题,这些问题的答案构成了关于编程的有用知识体系。如果你真的花了两个小时研究这个,那么你真的需要加强你的研究技能,如果只是为了你未来作为一名编程专业人士的发展。您的问题的答案就在String#replace MDN 页面上,靠近顶部,一目了然。

标签: javascript regex character-replacement


【解决方案1】:

要插入$,您需要$$,在您的情况下,$& 是特殊的替换模式,如果您先将$ 转义为$$,它将起作用。

var my_string = "aicId";
var my_pattern = "i";
var my_regex = new RegExp(my_pattern, "gi");
var my_result = my_string.replace(my_regex, "x$$&y");
document.write('<pre>' + JSON.stringify(my_result, 0, 2) + '</pre>');

或者你可以使用函数作为第二个参数而不转义:

来自MDN

您可以指定一个函数作为第二个参数。在这种情况下,将在执行匹配后调用该函数。函数的结果(返回值)将用作替换字符串。

var my_string = "aicId";
var my_pattern = "i";
var my_regex = new RegExp(my_pattern, "gi");
var my_result = my_string.replace(my_regex, function() {
    return "x$&y";
});
document.write('<pre>' + JSON.stringify(my_result, 0, 2) + '</pre>');

【讨论】:

  • 谢谢。效果很好。
【解决方案2】:

如果您想返回“ax$&ycx$&yd”,这应该可以:

var my_result = my_string.replace(my_regex,"x$$\&y");

因为在正则表达式的第一部分,“$”需要被转义,因为它是一个特殊的正则表达式字符,表示字符串的结尾。

正则表达式的第二部分被视为“普通”字符串,其中“$”没有特殊含义。

来自here

【讨论】:

  • 您为什么没有将问题标记为重复,而是从另一个解决方案中获取答案?
  • @noob 哈!好点子。我是新手:)
猜你喜欢
  • 2012-07-09
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 2016-05-27
相关资源
最近更新 更多