我试图用"$$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()#描述