在JavaScript中使用replaceAll和美元符号

3

我有一个包含3个美元符号的字符串,例如$$$Test123。我想在一个

中显示这个字符串。

问题是,当我使用replace时,我得到的是$$Test123——只有2个美元符号,而不是3个。

示例:

var sHtml="<_content_>";
var s="$$$Test";
sHtml= sHtml.replace("<_content_>", s);

现在sHtml的结果是$$Test; 有什么办法可以解决吗?
4个回答

8

JavaScript没有默认的替换全部函数。您可以像这样编写自己的函数:


function replaceAll(txt, replace, with_this) {
  return txt.replace(new RegExp(replace, 'g'),with_this);
}


1
这只是一个过于简化的 replaceAll 方法示例 - 任何在正则表达式中具有特殊功能的符号都需要进行转义,否则在某些字符串上会遇到问题。 - Andy E

3

$在调用replace()方法时,作为第二个参数的字符串中具有特殊含义。通常情况下,它用于引用原始字符串中匹配的表达式。例如:

"foo foooo".replace(/fo+/g, "$&bar");
//-> "foobar foooobar"

在上面的示例中,$&指的是整个匹配项,第一个单词中为foo,第二个单词中为foooo
你的问题源于$的特殊含义。为了在匹配中使用字面意义的$,你必须把两个连在一起,以便第一个转义第二个。要有3个字面意义的$符号,你必须把它们连在一起6次,如下所示:
var sHtml="<_content_>";
var s="$$$$$$Test";  
sHtml= sHtml.replace("<_content_>", s);
//-> "$$$Test"

1

引号是你的朋友

var sHtml="<_content_>"  
var s="$$$Test";  
sHtml= sHtml.replace("<_content_>", s);

0

尝试使用这个replaceAll函数:

http://www.dumpsite.com/replaceAll.php

它使用正则表达式通过javascript replace函数执行替换所有操作,以提高速度,并同时消除当搜索或替换字符串中意外存在正则表达式特殊字符时发生的副作用。

使用此函数,您无需担心转义特殊字符。在执行replaceAll之前,所有特殊字符都已经被预先转义。

此函数将生成您期望的输出。

尝试一下并提供您的反馈。


这个问题很久了,所以请求者很可能已经找到了解决这个问题的方法。 - GargantuChet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接