我简化了遇到的问题 如果我在Chrome中执行以下代码,我会遇到一个奇怪的行为:
var a = "$&";
var b = "aba";
var c = b.replace(/a/, a);
console.log(c); // expected output is: "$&b$&"
// but output is: "aba"
但如果我执行以下代码,我会得到预期的输出
var a = "c";
var b = "aba";
var c = b.replace(/a/, a);
console.log(c); // expected output is: "cbc"
// and output is: "cbc"
有任何想法如何解决这个问题? 这是一个错误吗? 我是否必须在某些方面转义变量a中的字符串?
答案 0 :(得分:4)
如果要在替换字符串中使用$
,则需要使用$$
对其进行转义。 The $
character is used as a backreference:
var a,
b,
c;
a = "$$&";
b = "aba";
c = b.replace(/a/, a);
console.log(c); //$&ba
如果要替换字符串中模式的所有实例,则需要mark the regular expression as being global:
var a,
b,
c;
a = "$$&";
b = "aba";
c = b.replace(/a/g, a);
console.log(c); //$&b$&
答案 1 :(得分:2)
$
是一个反向引用字符。它在替换字符串中具有特殊含义。
见相关问题:
JavaScript - string regex backreferences
或者,更有帮助的是,请访问此页面以获取更详细的文档:
http://www.regular-expressions.info/javascript.html#replace
要修复您的替代品,请尝试:
var a = "$$&";
var b = "aba";
var c = b.replace(/a/g, a);
编辑:忘记全局替换字符。加入。
答案 2 :(得分:0)
两个问题:
(1)如果要替换所有出现的内容,则需要使用/g
修饰符
(2)正则表达式中的字符串$&
具有模式匹配的含义,因此您自己替换匹配
把它放在一起你需要通过另一个转义美元符号来修改你的代码......>>
var a = "$$&";
var b = "aba";
var c = b.replace(/a/g, a);