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

13 javascript

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

var text = "as";
text = text.replace(text,"$\'");
console.log(text);
Run Code Online (Sandbox Code Playgroud)

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

Mis*_*lin 20

为了使用$中得到的字符串,使用$$$在JavaScript的特殊含义正则表达式和字符串replace方法:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter


小智 13

如果我不知道我用的替换字符串是什么

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

  • 实际上,由于在整个项目中使用了可本地化字符串中的模板,这一技巧实际上在我的一个项目中的任何地方都可能挽救了我的屁股。如果从用户输入或其他任何内容中给出了“$”,那么要弄清楚哪些“$”应该被转义就有点太麻烦了。只需在字符串前抛出 `() =>` 即可轻松完成。 (2认同)