在Javascript中,如何使用'/'和'/ g'中的变量对字符串执行全局替换?

时间:2009-02-12 16:49:52

标签: javascript regex string

我想在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);

但它们不起作用。有什么想法吗?

11 个答案:

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

silmiar post

答案 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}

其中

  • g是全局区分大小写的替代
  • gi是全局不区分大小写的替换

您可以查看此JSBIN链接

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

答案 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