我想在Javascript中使用String.replace执行字符串的全局替换。
在我阅读的文档中,我可以使用/ g执行此操作,例如;
var mystring = mystring.replace(/test/g, mystring);
这将替换mystring中出现的所有内容。没有引号用于表达。
但如果我有一个要查找的变量,我怎么能在没有引号的情况下这样做?
我尝试过这样的事情:
var stringToFind = "test";
//首先尝试
mystring = mystring.replace('/' + stringToFind + '/g', mystring);
//第二次尝试,根本没有多大意义
mystring = mystring.replace(/stringToFind/g, mystring);
但它们不起作用。有什么想法吗?
答案 0 :(得分:178)
var mystring = "hello world test world";
var find = "world";
var regex = new RegExp(find, "g");
alert(mystring.replace(regex, "yay")); // alerts "hello yay test yay"
如果你需要这个功能
replaceGlobally(original, searchTxt, replaceTxt) {
const regex = new RegExp(searchTxt, 'g');
return original.replace(regex, replaceTxt) ;
}
答案 1 :(得分:70)
对于正则表达式,new RegExp(stringtofind, 'g');
。但。如果'find'包含正则表达式中特有的字符,它们将具有其regexy含义。所以如果你试图替换'。'在'abc.def'和'x'中,你会得到'xxxxxxx' - 哎呀。
如果你想要的只是一个简单的字符串替换,那么就不需要正则表达式了!这是普通的字符串替换习语:
mystring= mystring.split(stringtofind).join(replacementstring);
答案 2 :(得分:36)
正则表达式比字符串搜索慢得多。因此,使用转义搜索字符串创建正则表达式不是最佳方式。即使循环使用字符串也会更快,但我建议使用内置的预编译方法。
这是一种快速全新的全局字符串替换方法:
sMyString.split(sSearch).join(sReplace);
就是这样。
答案 3 :(得分:16)
String.prototype.replaceAll = function (replaceThis, withThis) {
var re = new RegExp(RegExp.quote(replaceThis),"g");
return this.replace(re, withThis);
};
RegExp.quote = function(str) {
return str.replace(/([.?*+^$[\]\\(){}-])/g, "\\$1");
};
var aa = "qwerr.erer".replaceAll(".","A");
alert(aa);
答案 4 :(得分:3)
这是正则表达式,而不是字符串。使用RegExp对象的构造函数动态创建正则表达式。
var r = new RegExp(stringToFind, 'g');
mystring.replace(r, 'some replacement text');
答案 5 :(得分:2)
尝试:
var stringToFind = "test";
mystring = mystring.replace(new RegExp(stringToFind, "g"), mystring);
答案 6 :(得分:1)
如果要插入变量,则需要使用RegExp对象
https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Regular_Expressions
示例:
var str = "This is my name";
var replace = "i";
var re = new RegExp(replace, 'g')
str = str.replace(re, 'p');
alert(str);
答案 7 :(得分:1)
动态全局替换
我来到这个线程寻找一个稍微复杂的解决方案,这里没有回答。我现在已经找到了答案,所以我将发布它以防其他人发现它有用。
我想进行动态全局替换,替换字符串基于原始匹配。
例如,将所有单词的第一个字母(例如“cat sat mat”)大写为“Cat Sat Mat”,并使用全局查找替换。这是如何做到的。
function capitaliseWords(aString) {
// Global match for lowercase letters following a word boundary
var letters = aString.match(/\b[a-z]/g), i, letterMatch;
// Loop over all matched letters
for( i = 0; i < letters.length; i++ ) {
// Replace the matched letters with upper case versions
letterMatch = new RegExp('\\b'+letters[i]); // EDIT - slight fix
aString = aString.replace(letterMatch, letters[i].toUpperCase());
}
// Return our newly capitalised string
return aString;
}
alert( capitaliseWords("cat sat mat") ); // Alerts "Cat Sat Mat"
答案 8 :(得分:1)
您可以使用以下解决方案对在'/'和'/ g'内的变量的字符串执行全局替换:
myString.replace(new RegExp(strFind, 'g'), strReplace);
答案 9 :(得分:0)
您可以使用以下方法
看到这个功能:
function SetValue()
{
var txt1='This is a blacK table with BLack pen with bLack lady';
alert(txt1);
var txt2= txt1.replace(/black/gi,'green');
alert(txt2);
}
<强> 语法:的强>
/ search_string的/ {G | GI}
其中
您可以查看此JSBIN链接
答案 10 :(得分:-13)
你能使用prototype.js吗?如果是这样,你可以使用String.gsub,比如
var myStr = "a day in a life of a thing";
var replace = "a";
var resultString = myStr.gsub(replace, "g");
// resultString will be "g day in g life of g thing"
它也会采用正则表达式。对我而言,这是解决它的更优雅的方法之一。 prototypejs gsub documentation