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

68 javascript regex string

我想在Javascript中使用String.replace执行字符串的全局替换.

在文档中,我读到我可以使用/ g执行此操作,例如;

var mystring = mystring.replace(/test/g, mystring);
Run Code Online (Sandbox Code Playgroud)

这将取代mystring内的所有事件.表达式没有引号.

但如果我有一个变量可以找到,我怎么能没有引号?

我尝试过这样的事情:

var stringToFind = "test";
Run Code Online (Sandbox Code Playgroud)

//第一次尝试

mystring = mystring.replace('/' + stringToFind + '/g', mystring);
Run Code Online (Sandbox Code Playgroud)

//第二次尝试,根本没有多大意义

mystring = mystring.replace(/stringToFind/g, mystring);
Run Code Online (Sandbox Code Playgroud)

但他们不起作用.有任何想法吗?

Pao*_*ino 188

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"
Run Code Online (Sandbox Code Playgroud)

如果你需要这个功能

  replaceGlobally(original, searchTxt, replaceTxt) {
    const regex = new RegExp(searchTxt, 'g');
    return original.replace(regex, replaceTxt) ;
  }
Run Code Online (Sandbox Code Playgroud)

  • 这个帮助了我! (3认同)
  • 当然,`find`应该是一般的逃脱. (2认同)

bob*_*nce 74

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

如果你想要的只是一个简单的字符串替换,那么就不需要正则表达式了!这是普通的字符串替换习语:

mystring= mystring.split(stringtofind).join(replacementstring);
Run Code Online (Sandbox Code Playgroud)

  • +1 总是很高兴看到人们思考的问题超出了问题的字面答案。 (2认同)
  • @Kato我也很好奇,所以我创建了一个jsperf性能测试来查找.链接:http://goo.gl/cbZiV (2认同)

Lex*_*Lex 37

正则表达式比字符串搜索慢得多.因此,使用转义搜索字符串创建正则表达式不是最佳方式.即使循环使用字符串也会更快,但我建议使用内置的预编译方法.

这是快速全新的字符串替换快速而简洁的方法:

sMyString.split(sSearch).join(sReplace);
Run Code Online (Sandbox Code Playgroud)

就是这样.

  • 优秀解决方案 (2认同)

uni*_*ogo 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);
Run Code Online (Sandbox Code Playgroud)

silmiar帖子

  • 我的实现稍微严格了一点`str.replace(/ [\ - \[\]\/\{\} \(\)\*\+ \?\.\,\\\ ^\$\| \#\ s ]/g,'\\ $&')` (2认同)

小智 10

您可以使用以下解决方案对包含 '/' 和 '/g' 变量的字符串执行全局替换:

myString.replace(new RegExp(strFind, 'g'), strReplace);
Run Code Online (Sandbox Code Playgroud)


Hea*_*ser -23

你可以使用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"
Run Code Online (Sandbox Code Playgroud)

它还需要正则表达式。对我来说,这是解决这个问题的更优雅的方法之一。prototypejs gsub 文档

  • 有一个**简单得多**的解决方案,实际上非常有效:`myStr.split('a').join('g')`。也不需要prototype.js。 (18认同)
  • 这不是一个有用的答案,因为有一些简单的符合标准的方法可以完成同样的事情。 (3认同)