比如 var s = "123aaa345bbb999ddd'现在有个数字var a = [111,222,333]s中的数字不一定是123,345和999,我现在希望把中间出现的第一个数字替换成111,第二个222,第三个333,要怎么弄啊
其中123,345和999我可以用match提出来,但是就是不知道怎么去替换。 
实际情况字符串s中的数量 不一定是三个,也不一定和a中的替换数字数量吻合,所以不能写死。
也不能这样写:
 var r = /[^\d]/g;
 var old = s.match(r);
 for(var i=0; i<a.length; i++)
 {
    s.replace(old[i], a[i]);
  }因为这样有个bug,加入字符串是"1a2b3c",而需要替换成(2,5,6),那么
第一轮循环之后字符串变成了"2a2b3c"
第二轮本来该替换a和b中间那个2,但是结果却会把第一个2替换成5。

解决方案 »

  1.   

    如果数字部分有四段或更多数字段呢?
    123aaa345bbb999ddd666bbb
    那么前面3个变成了111aaa222bbb333,那么666继续变成111还是不替换??
      

  2.   

    var s="123aaa345bbb999ddd";
    var a = [111,222,333];
    var i = 0;
    s = s.replace(/\d+/g,function(){
        if (a[i]) return a[i++];
    });
    alert(s);
      

  3.   

    var s="123aaa345bbb999ddd777aaaa88888";
    var a = [111,222,333];
    var i = 0;
    var len = a.length;
    s = s.replace(/\d+/g,function(){
        if (a[i%len]) {return a[i++%len]};
    });
    alert(s);
      

  4.   

    谢谢,原来replace用函数做参数的时候return值有用啊