在Chrome 52中测试代码
var a = "$$";
var b = "{data}";
var result = b.replace("{data}", a);
console.log(result);
结果应为" $$
",但console.log显示" $
"。
为什么有一个$
而不是两个$$
?
答案 0 :(得分:5)
因为$$
是replace
替换字符串中的特殊标记。在replace
替换字符串中,$
是转义字符(more on MDN)。要将$$
实际放入字符串中,请使用$$$$
。
以下是可以使用的$
序列序列:
$$
- 插入$
。$&
- 插入匹配的子字符串。$`
- 插入匹配子字符串之前的字符串部分。$'
- 插入匹配子字符串后面的字符串部分。$n
其中n是小于100的非负整数,插入第n个带括号的子匹配字符串,前提是第一个参数是RegExp对象。
以下是使用所有这些内容的示例:
var str = "This is a test.";
console.log(str.replace(
/\b(is) a\b/,
"[[\n" +
"Dollar sign: $$\n" +
"Matched: $&\n" +
"Before: $`\n" +
"After: $'\n" +
"Captured: $1\n" +
"]]"
));

答案 1 :(得分:2)
...因为$
在替换字符串中具有特殊含义,$$
表示文字$
。
请参阅MDN以获取此类特殊序列的列表。