4

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

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

为什么它在输出中显示一美元?如何解决这个问题?

这是 jsfiddle http://jsfiddle.net/RxDa5/

请帮忙。

4

7 回答 7

6

查看MDN 文档

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

$$ Inserts a "$".

所以你必须这样做:

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

另请参阅Javascript 字符串替换怪异—— $$$$ 折叠为 $$——这个结果背后的原因是什么?.

于 2012-07-23T16:01:39.800 回答
3

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

var adHtmltext ="this is ashok"
adHtmltext = adHtmltext.replace("this", "$$$$Ashok");
alert(adHtmltext );
于 2012-07-23T16:02:46.813 回答
3

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

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

$$用于转义美元符号。在这种情况下,您实际需要的每个美元符号都需要两个美元符号。

这是因为否则您将无法$1在输出中包含该字符串。

于 2012-07-23T16:04:49.483 回答
2

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

因为'$'在这个上下文中有特殊的含义,它需要被转义,而'$$'是产生正常'$'的转义序列,所以你的代码中只需要'$$$$Ashok' .

于 2012-07-23T16:03:02.470 回答
1

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

特别是在您的情况下,“$$”变为“$”,因为其他字符与“$”的某些组合(例如“$&”)保留用于与某些子字符串匹配。如果您希望您的替换工作,只需使用“$$$$Ashok”,它将在最终字符串中变为“$$Ashok”。

于 2012-07-23T16:01:55.727 回答
0

寻找通用解决方案,我获得了以下信息:

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

有用:

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

输入:$&
结果:foo $& bar $& 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.prototype.replace()#Description

于 2018-04-15T23:48:04.677 回答
0

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

function customReplacer() {
return "$$Ashok";
}
adHtmltext = adHtmltext.replace("this", customReplacer);
于 2019-02-08T17:59:06.380 回答