我试图用“$$Ashok”替换下面示例中的“this”。我没有得到预期的输出。
var adHtmltext ="this is ashok"
adHtmltext = adHtmltext.replace("this", "$$Ashok");
alert(adHtmltext );
为什么它在输出中显示一美元?如何解决这个问题?
这是 jsfiddle http://jsfiddle.net/RxDa5/
请帮忙。
我试图用“$$Ashok”替换下面示例中的“this”。我没有得到预期的输出。
var adHtmltext ="this is ashok"
adHtmltext = adHtmltext.replace("this", "$$Ashok");
alert(adHtmltext );
为什么它在输出中显示一美元?如何解决这个问题?
这是 jsfiddle http://jsfiddle.net/RxDa5/
请帮忙。
$$
是 的转义码$
,因为$
是正则表达式反向引用的转义码。不幸的是,你需要这个:
var adHtmltext ="this is ashok"
adHtmltext = adHtmltext.replace("this", "$$$$Ashok");
alert(adHtmltext );
美元符号是保留字符.replace()
事实上,在您的 jsFiddle 代码中,就在顶部,您已经将它用于它的保留目的——即$1
您在其中捕获部分表达式的目的。
$$
用于转义美元符号。在这种情况下,您实际需要的每个美元符号都需要两个美元符号。
这是因为否则您将无法$1
在输出中包含该字符串。
该.replace
方法还将接受正则表达式作为第一个参数,如果您对文本的一部分进行分组,您可以将其包含在输出文本中,并使用“$”字符和一个数字指定要哪个组使用(1 美元、2 美元等)。
因为'$'在这个上下文中有特殊的含义,它需要被转义,而'$$'是产生正常'$'的转义序列,所以你的代码中只需要'$$$$Ashok' .
在替换目标模式的字符串中可以包含一些特殊模式,带有“$$”的字符串就是其中之一。请参阅Mozilla MDN 文档以获得更好的参考。
特别是在您的情况下,“$$”变为“$”,因为其他字符与“$”的某些组合(例如“$&”)保留用于与某些子字符串匹配。如果您希望您的替换工作,只需使用“$$$$Ashok”,它将在最终字符串中变为“$$Ashok”。
寻找通用解决方案,我获得了以下信息:
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, '$$$$')
对替换字符串应用转义任何自定义的替换函数都可以更优雅地解决这个问题。您只需从中返回预期的字符串,它将被原样替换。
function customReplacer() {
return "$$Ashok";
}
adHtmltext = adHtmltext.replace("this", customReplacer);