jQuery用另一个替换字符

时间:2015-04-02 12:30:06

标签: jquery

让我说我有:

<h1>Win $50<h1>

我需要用jQuery将$符号更改为€ 所以我可以这样做:

$('h1').text( $('h1').text().replace('$', '€') );

但如果我有类似的话会怎么样:

<h1>Win $50 and Get $100</h1>

它只会改变第一个,我怎么能改变它?

3 个答案:

答案 0 :(得分:6)

将regexp与g标志一起使用

$('h1').text( $('h1').text().replace(/\$/g, '€') );

答案 1 :(得分:4)

使用正则表达式。

&#13;
&#13;
txt = $('h1').text().replace(/\$/g, '€')
$('h1').text(txt);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Win $50 and get $100</h1>
&#13;
&#13;
&#13;

g代表&#34;全球&#34; (所有实例)

正如RafH所说,$是正则表达式中的一个特殊字符,因此需要使用\进行转义。

答案 2 :(得分:0)

这是一个辅助函数,它是我实用程序库的一部分,我将其添加到我编写的每一段代码中。随意以任何你喜欢的方式使用它。

String.prototype.replaceAll = function (stringFind, stringReplace) {
    var ex = new RegExp(stringFind.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"), "g");
    return this.replace(ex, stringReplace);
};

它为所有字符串添加了replaceAll函数,因此您不必在整个代码中不断使用RegEx。

您可以像这样使用

str.replaceAll("$", "€");

以下是一个例子:

String.prototype.replaceAll = function (stringFind, stringReplace) {
  var ex = new RegExp(stringFind.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"), "g");
  return this.replace(ex, stringReplace);
};

var str = "Win $50 and Get $100";

document.body.innerHTML = str.replaceAll("$", "€");


编辑以下评论中的测试用例:

String.prototype.replaceAll = function (stringFind, stringReplace) {
  var ex = new RegExp(stringFind.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"), "g");
  return this.replace(ex, stringReplace);
};

var str = "test test abc test abc $%& test $%& $%&. test. abc $%& . .";
document.body.innerHTML = str  + "<br />";
document.body.innerHTML += str.replaceAll(".", "") + "<br />";
document.body.innerHTML += str.replaceAll("%&", "") + "<br />";
document.body.innerHTML += str.replaceAll("test", "") + "<br />";
document.body.innerHTML += str.replaceAll("a-z", "") + "<br />";


<强>更新

根据以下Danilo的评论(谢谢!),原始函数不允许某些特殊字符,如果在replaceAll()函数中输入了文本范围,则会出错。在我自己的代码中,我还没有遇到过这些案例。

Per this answer,我已经更新了我的函数,以便它现在可以逃避RegEx在提供的测试用例场景中更高效。