Javascript用$替换问题

时间:2012-07-23 15:58:32

标签: javascript

我正在尝试将以下示例中的“this”替换为“$$ Ashok”。我没有得到预期的输出。

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

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

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

请帮忙。

7 个答案:

答案 0 :(得分:6)

查看MDN documentation

  

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

     

$$ Inserts a "$".

所以你必须这样做:

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

另见Javascript string replace weirdness -- $$$$ gets collapsed to $$ -- what's the reason behind this result?

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

美元符号是.replace()

的保留字符

事实上,在你的jsFiddle代码中,就在顶部,你已经将它用于它的保留目的 - 即你在那里获得的$1来捕获部分表达式。​​

$$用于逃避美元符号。对于您实际需要的每一个美元符号,您需要在此上下文中使用两个美元符号。

这是因为否则你的输出中没有字符串$1

答案 3 :(得分:2)

可以在字符串中包含用您替换目标模式的特殊模式,而带有'$$'的字符串就是其中之一。有关更好的参考信息,请参阅Mozilla MDN docs

在具体情况下,'$$'变为'$'作为其他字符的某些组合与'$',如'$&'保留用于与某些子串匹配。如果你想让你的替代品工作,只需使用'$$$$ Ashok',它将成为最后一串中的'$$ Ashok'。

答案 4 :(得分:2)

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

因为'$'在这种情况下具有特殊含义,所以需要对其进行转义,并且'$$'是生成正常'$'的转义序列,因此您只需要'$$$$ Ashok'在你的代码中。

答案 5 :(得分:0)

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

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

有效:

  

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

     

输入:$&
  结果:foo $&酒吧$&巴兹

但由于多级$转义,这有点棘手。在内部$$$$ ...

中查看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

答案 6 :(得分:0)

任何自定义替换功能都可以更优雅地解决此问题。您只需要从中返回想要的字符串,它就会被替换。

board[y][x] = "O"