当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在Javascript中,如何使用'/'和'/g'中的变量对字符串执行全局替换?》经验,为你挑选了4个好方法。

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

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



1> Paolo Bergan..:
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) ;
  }


这个帮助了我!
当然,`find`应该是一般的逃脱.

2> bobince..:

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

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

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


@Kato我也很好奇,所以我创建了一个jsperf性能测试来查找.链接:http://goo.gl/cbZiV

3> Lex..:

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

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

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

就是这样.


优秀解决方案

4> unigogo..:
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帖子


我的实现稍微严格了一点`str.replace(/ [\ - \[\]\/\{\} \(\)\*\+ \?\.\,\\\ ^\$\| \#\ s ]/g,'\\ $&')`
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有