让我说我有:
<h1>Win $50<h1>
我需要用jQuery将$符号更改为€ 所以我可以这样做:
$('h1').text( $('h1').text().replace('$', '€') );
但如果我有类似的话会怎么样:
<h1>Win $50 and Get $100</h1>
它只会改变第一个,我怎么能改变它?
答案 0 :(得分:6)
将regexp与g标志一起使用
$('h1').text( $('h1').text().replace(/\$/g, '€') );
答案 1 :(得分:4)
使用正则表达式。
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;
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在提供的测试用例场景中更高效。