在Javascript中,如何执行全局replacestring与'/'和'/ g'中的variables?

我想在Javascript中使用String.replace执行全局replacestring。

在我读的文档中,我可以用/ g来完成这个工作,例如:

var mystring = mystring.replace(/test/g, mystring); 

这将取代mystring内的所有事件。 没有引号的expression。

但是,如果我有一个variablesfind,我怎么能不用引号?

我试过这样的事情:

 var stringToFind = "test"; 

//第一次尝试

 mystring = mystring.replace('/' + stringToFind + '/g', mystring); 

//第二次尝试,没有多less意义

 mystring = mystring.replace(/stringToFind/g, mystring); 

但他们不工作。 有任何想法吗?

你可以使用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" 

它也将采取正则expression式。 对我来说,这是解决问题的更优雅方法之一。 prototypejs gsub文档

 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" 

对于正则expression式, new RegExp(stringtofind, 'g'); 。 但。 如果'find'包含正则expression式中特殊的字符,则它们将具有它们的regexy含义。 所以如果你试图replace'。' 在'abc.def'和'x'中,你会得到'xxxxxxx' – 哎呀。

如果你只想要一个简单的stringreplace,就不需要正则expression式! 这里是普通的stringreplace成语:

 mystring= mystring.split(stringtofind).join(replacementstring); 

正则expression式比stringsearch要慢得多。 所以,用转义searchstring创build正则expression式不是一个最佳的方法。 即使循环虽然string会更快,但我build议使用内置的预编译方法。

这是一个快速,干净的方法来做快速的全局stringreplace:

 sMyString.split(sSearch).join(sReplace); 

就是这样。

 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); 

silmiar职位

这是一个正则expression式,而不是一个string。 使用RegExp对象的构造函数dynamic创build正则expression式。

 var r = new RegExp(stringToFind, 'g'); mystring.replace(r, 'some replacement text'); 

尝试:

 var stringToFind = "test"; mystring = mystring.replace(new RegExp(stringToFind, "g"), mystring); 

如果你想插入variables,你需要使用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); 

dynamic的全球替代

我来到这个线程寻找一个稍微复杂的解决scheme,这里没有回答。 我现在find了答案,所以我会发布它,以防其他人发现它有用。

我想做一个dynamic的全局replace,其中replacestring是基于原始匹配。

例如,将所有单词的第一个字母(例如,“猫坐席”变成“猫坐席”)的全局查找replace。 以下是如何做到这一点。

 function capitaliseWords(aString) { // Global match for lowercase letters following a word boundary var letters = aString.match(/\b[az]/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" 

你可以使用下面的方法

看到这个function:

 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}

哪里

  • g是全球区分大小写的替代品
  • gi是全局不区分大小写的replace

你可以检查这个JSBIN链接

http://jsbin.com/nohuroboxa/edit?html,js,output