2

我已经简化了我遇到的问题。
如果我在 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 中的字符串?

4

3 回答 3

4

如果要$在替换字符串中使用,则需要使用$$. $字符用作反向引用

var a,
    b,
    c;
a = "$$&";
b = "aba";
c = b.replace(/a/, a);
console.log(c); //$&ba

如果要替换字符串中模式的所有实例,则需要将正则表达式标记为 global

var a,
    b,
    c;
a = "$$&";
b = "aba";
c = b.replace(/a/g, a);
console.log(c); //$&b$&
于 2012-10-12T19:52:23.523 回答
2

$一个反向引用字符。它在替换字符串中具有特殊含义。

请参阅此相关问题:
JavaScript - 字符串正则表达式反向引用

或者,更有帮助的是,访问此页面以获取更详细的文档:
http ://www.regular-expressions.info/javascript.html#replace

要修复您的替换,请尝试:

var a = "$$&";
var b = "aba";

var c = b.replace(/a/g, a);

编辑:忘记了全局替换字符。添加。

于 2012-10-12T19:47:13.273 回答
0

两个问题:

(1)如果要替换所有出现,则需要使用/g修饰符

(2) 正则表达式中的字符串$&具有模式匹配的含义,因此您自己替换了匹配

把它放在一起你需要修改你的代码,将美元符号转义为另一个...... >>

var a = "$$&"; 
var b = "aba"; 
var c = b.replace(/a/g, a);
于 2012-10-12T20:04:06.260 回答