为什么用$$替换只会产生$

elv*_* qi 2 javascript google-chrome

在Chrome 52中测试了代码

   var a = "$$";
   var b = "{data}";
   var result = b.replace("{data}", a);
   console.log(result);
Run Code Online (Sandbox Code Playgroud)

结果应为" $$",但console.log显示" $".

为什么有一个$而不是两个$$

T.J*_*der 5

因为$$replace替换字符串中的特殊标记.在replace替换字符串中,$是一个转义字符(在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" +
  "]]"
));
Run Code Online (Sandbox Code Playgroud)