使用美元符号($)作为替换时,`string.replace`奇怪的行为

时间:2012-02-24 00:40:44

标签: javascript

我在我的JavaScript代码中发现了一个错误,我已经将其隔离到一个字符串替换中,这种错误的行为方式与我没想到的一样。以下是代码示例:

var text = "as";
text = text.replace(text,"$\'");
console.log(text);

这会将空字符串输出到控制台。我原以为它要打印$'到控制台。有谁能解释一下?

3 个答案:

答案 0 :(得分:19)

要在结果字符串中使用$,请使用$$,因为$在JavaScript正则表达式和字符串replace方法中具有特殊含义:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter < / p>

答案 1 :(得分:13)

如果我不知道替换字符串中的内容,我会使用

replaceWith = "might have 2 $ signs $$ $$$ $$$$"
"a b c".replace("b", replaceWith) // unexpected result
"a b c".replace("b", function(){return replaceWith}) // no surprises

答案 2 :(得分:1)

实际上,此问题最直接的答案是对替换字符串使用函数,因为w3c规范指出此结果将不受特殊字符的影响。

var str = "abc {def} ghi";

console.log(str.replace("{def}", function() {
  return "foo$'bar"; 
}));

// result is
// "abc foo$'bar ghi"

此处的MDN文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

相关问题