解决方案 »

  1.   

    var a="tom jintian ruan yi mi tiii";
    n = 4;
    document.write(a.replace(/\s+/g, function(r) { return n++ + r }));
    tom4 jintian5 ruan6 yi7 mi8 tiii 
      

  2.   

    var i=4;//定义初始值
    var a="tom jintian ruan yi mi tiii";
    a=a.replace(/\S(?=\s+)/g,function(v){
    return v+(i++);
    });
    alert(a);
      

  3.   

    第一、我冒昧的问一句,这个中间的零宽断言这么理解呢,
    我看犀牛书上是这样写得:(?=p) 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
    怎么理解呢?
    第二、问一下,replace中的函数参数个数问题,如果正则有多个括号,后面的形参是传多个,还是用arguments 来接收实际参数个数?
      

  4.   

    你可以简单的了解零宽度断言 是匹配位置,而不匹配实质内容,接符合p的位置如下,replace第二个参数接受函数,函数的参数,第一个为正则匹配的整体,第二个为分组1,第三个为分组2,以此类推
    var str="123zza456";
    str.replace(/(\d+)([a-z]+)(\d+)/,function(v,p1,p2,p3){
    alert(v+'|'+p1+'|'+p2+'|'+p3);
    });
      

  5.   

    对于这个来说比较好理解,匹配到然后就用数字+匹配的空格连接组合成字符串
    a.replace(/\s+/g, function(r) { return n++ + r });
    我试了一下,零宽断言是匹配  零宽断言条件 ,返回断言前那个无宽度的位置,
    但是我试了一下传过去的参数 v 是断言前一个字符(如图)?为什么呢,
    整个 return 回来的字符有时组装好了的。感觉好神奇