我在我的JavaScript代码中发现了一个错误,我已经将其隔离到一个字符串替换中,这种错误的行为方式与我没想到的一样。以下是代码示例:
var text = "as";
text = text.replace(text,"$\'");
console.log(text);
这会将空字符串输出到控制台。我原以为它要打印$'到控制台。有谁能解释一下?
答案 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