我在我的 JavaScript 代码中发现了一个错误,我将其隔离到字符串替换中,该错误的行为方式出乎我的意料。这是代码的示例:
var text = "as";
text = text.replace(text,"$\'");
console.log(text);
这将向控制台打印一个空字符串。我期待它打印 $' 到控制台。谁能解释一下?
我在我的 JavaScript 代码中发现了一个错误,我将其隔离到字符串替换中,该错误的行为方式出乎我的意料。这是代码的示例:
var text = "as";
text = text.replace(text,"$\'");
console.log(text);
这将向控制台打印一个空字符串。我期待它打印 $' 到控制台。谁能解释一下?
为了$
在结果字符串中使用$$
,$
在 JavaScript 正则表达式和字符串replace
方法中使用as具有特殊含义:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter
如果我不知道我使用的替换字符串中有什么
replaceWith = "might have 2 $ signs $$ $$$ $$$$"
"a b c".replace("b", replaceWith) // unexpected result
"a b c".replace("b", function(){return replaceWith}) // no surprises
实际上,对这个问题最直接的回答是使用替换字符串的函数,因为 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