Javascript将问题替换为$

Javascript replace issue with $

本文关键字:替换 问题 Javascript      更新时间:2024-01-04

我试图用"$$Ashok"替换下例中的"this"。我没有得到预期的输出。

    var adHtmltext ="this is ashok"
    adHtmltext = adHtmltext.replace("this", "$$Ashok");
    alert(adHtmltext );

为什么它的产出只有1美元?如何解决这个问题?

这是小提琴http://jsfiddle.net/RxDa5/

请帮忙。

查看MDN文档:

替换字符串可以包括以下特殊的替换模式:

$$ Inserts a "$".

所以你必须做:

adHtmltext.replace("this", "$$$$Ashok");

另请参阅Javascript字符串替换怪异--$$$$被折叠为$$--what';这个结果背后的原因是什么?。

$$$的转义码,因为$是正则表达式反向引用的转义码。不幸的是,你需要这个:

var adHtmltext ="this is ashok"
adHtmltext = adHtmltext.replace("this", "$$$$Ashok");
alert(adHtmltext );

美元符号是.replace() 的保留字符

事实上,在您的jsFiddle代码中,就在顶部,您已经将其用于它的保留用途——即您在其中捕获部分表达式的$1

$$用于转义美元符号。在这种情况下,你需要两个美元符号来表示你真正想要的每一个美元符号。

这是因为否则您的输出中就不能有字符串$1

.replace方法也将接受正则表达式作为第一个参数,如果对文本的一部分进行分组,则可以将其包含在输出文本中,并使用"$"字符和指定使用哪一组的数字($1、$2等)作为"反向引用"。

由于"$"在此上下文中具有特殊含义,因此需要对其进行转义,而"$$"是生成正常"$"的转义序列,因此您只需要在代码中使用"$$$$Ashok"。

在替换目标模式的字符串中可以包含一些特殊模式,带有"$$"的字符串就是其中之一。有关更好的参考,请参阅Mozilla MDN文档。

具体来说,"$$"变为"$",作为其他字符与"$"的某些组合,如"$&"保留用于与某些子字符串匹配。如果你想让你的替代品发挥作用,只需使用"$$$$Ashok",它将在最后一个字符串中变成"$$Ashok"。

任何自定义的replacer函数都可以更优雅地解决这个问题。你只需要从中返回预期的字符串,它就会被原样替换。

function customReplacer() {
return "$$Ashok";
}
adHtmltext = adHtmltext.replace("this", customReplacer);

在寻找通用解决方案时,我获得了以下内容:

var input = prompt( 'Enter input:' ) || '';
var result = 'foo X bar X baz'.replace( /X/g, input.replace( /'$/g, '$$$$' ) );

它起作用:

输入:$$
结果:foo$$bar$$baz

输入:$&
结果:foo$&酒吧$&baz

但这有点棘手,因为多级$转义。请参阅内部replace中的$$$$。。。


因此,我尝试使用回调,但没有应用特殊的替换模式:

var result = 'foo X bar X baz'.replace( /X/g, function () {
    var input = prompt( 'Enter input:' ) || '';
    return input;
} );

它也能工作,但有一个警告:每次替换都会执行回调。因此,在上面的例子中,用户会被提示两次。。。

最后,这里是"回调"解决方案的固定代码,通过将提示从替换回调中移出:

var input = prompt( 'Enter input:' ) || '';
var result = 'foo X bar X baz'.replace( /X/g, function () {
    return input;
} );

总之,您有两种解决方案:

  • 对替换字符串应用.replace(/'$/g, '$$$$')转义
  • 使用回调,它只返回替换字符串

MDN引用:String.protype.replacement()#描述