2016-07-27 106 views
1

测试的代码在Chrome 52

var a = "$$"; 
    var b = "{data}"; 
    var result = b.replace("{data}", a); 
    console.log(result); 

结果应该是 “$$”,但执行console.log显示 “$”。

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

+0

使用'var a =“$$$$”'替代'double dollar'。 –

回答

1

...因为$在替换字符串特殊的意义,以及$$你如何表示文字$

这样的特殊序列的列表,请参阅MDN

4

因为$$replace替换字符串特殊令牌。在replace替换字符串中,$是一个转义字符(more on MDN)。要将$$实际放入字符串中,请使用$$$$

这里的一系列$序列可以使用:

  • $$ - 插入$
  • $& - 插入匹配的子字符串。
  • $` - 插入先于匹配的子串的部分。
  • $' - 插入下面的匹配的子串的部分。
  • $n其中n是一个非负整数比100更小,插入第n个括号内的子匹配串,所提供的第一个参数是一个正则表达式的对象。

下面是使用所有的人的例子:

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

实际上'$$$'对于'$$'替换就足够了。 –

+0

@GinoPane:恩,我不想掷骰子。假设你不控制后面的角色,而后面的角色恰好是一个有效的序列完成,比如'1'?更好地使用完整的序列,而不是半完整的序列。 –