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