Javascript将问题替换为$

Javascript将问题替换为$,javascript,Javascript,我试图用“$$Ashok”替换下面示例中的“this”。我没有得到预期的输出 var adHtmltext ="this is ashok" adHtmltext = adHtmltext.replace("this", "$$Ashok"); alert(adHtmltext ); 为什么它的产出只有1美元?如何解决这个问题 这是JSFIDLE 请帮助。请查看: 替换字符串可以包括以下特殊替换模式: $插入一个“$” 所以你必须做: adHtmltext.replac

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

    var adHtmltext ="this is ashok"
    adHtmltext = adHtmltext.replace("this", "$$Ashok");
    alert(adHtmltext );
为什么它的产出只有1美元?如何解决这个问题

这是JSFIDLE

请帮助。

请查看:

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

$
插入一个“$”

所以你必须做:

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

另请参见。

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


具体来说,$$变为“$”,因为带有“$”的其他字符的某些组合(如“$&”)保留用于与某些子字符串匹配。如果您想让替换项起作用,只需使用“$$$$Ashok”,它将在最后一个字符串中变成“$$Ashok”。

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

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

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


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

美元符号是
.replace()

事实上,在您的JSFIDLE代码中,就在顶部,您使用它是为了保留它的用途——即
$1
,您在其中捕获了表达式的一部分

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


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

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

var input = prompt( 'Enter input:' ) || '';
var result = 'foo X bar X baz'.replace( /X/g, input.replace( /\$/g, '$$$$' ) );
它的工作原理是:

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

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

但这有点棘手,因为有多层次的
$
转义。请参见内部
替换
中的
$$$


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

var result = 'foo X bar X baz'.replace( /X/g, function () {
    var input = prompt( 'Enter input:' ) || '';
    return input;
} );
它也可以工作,但有一个警告:每次替换都会执行回调。所以在上面的例子中,用户会被提示两次

最后,这里是“回调”解决方案的固定代码,将提示符移出replace回调:

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

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

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


MDN参考:

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

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

@ephemient:这是一个关于美元符号的正则表达式。虽然它很聪明,但扩展性不强。如果我想使用不同的替换字符串,具体取决于输入字符串,该怎么办?@cale_b,这个自定义替换函数只需要很少的参数,我想我们可以利用它们。