要匹配出来三个大概得这么写
var reg = /hello[^hello]*/ig;
var txt = "HelloNirvanahelloworldhello";
alert(txt.match(reg));
这样出来的三个匹配也和你想要的有一点不同哦。因为正则的匹配过程就是,产生一个匹配,然后从这个匹配的下一个位置开始再匹配。正向预查可以不吃掉预查的串,但也仅此而已,想要象你要的回到最前面然后产生一个不同的匹配得自己写代码实现。

解决方案 »

  1.   

    呵呵,要生成你要的东东,还真有点费事
    var reg = /hello[^hello]*/ig;
    var txt = "HelloNirvanahelloworldhello";
    var ar = txt.match(reg);
    for (var i=0;i<ar.length;i++){
    st = ar[i];
    ar[i] = txt.match(new RegExp(st+"\\w*"),"ig");
    txt = txt.substr(txt.indexOf(st)+st.length)
    }
    alert(ar)
      

  2.   

    大虾:
    -------------------------------------------------
    因为正则的匹配过程就是,产生一个匹配,然后从这个匹配的下一个位置开始再匹配。正向预查可以不吃掉预查的串,但也仅此而已,想要象你要的回到最前面然后产生一个不同的匹配得自己写代码实现。
    -------------------------------------------------像这种原理性的东西在哪里才能学到?MSDN上有么?
      

  3.   

    这方面的问题做perl和php的会更加熟悉一点
      

  4.   

    改成非贪婪模式:
    var reg = /hello\w*?/ig;这样就可以匹配出3个hello, 不过版本要求有点高IE5.0+
      

  5.   

    var reg = /hello[^hello]*/ig;
    这个正则有问题吧,[^hello]应该不是不包括"hello"串,而是不包含他们中的任意一个字母都会匹配.
      

  6.   

    你这个要求很简单,就是用你原来的正则(不要用g),然后获取每次匹配的结束位置,如何再从这个结束位置开始匹配,就可以了。写个while循环