var temp="HTML5 HTML5 HTML5 HTML5"; var regexp=/html5/gi; //alert(temp.search(regexp)); var v=temp.match(regexp).length; //alert(temp.match(regexp).length); for (var i = 0; i < temp.match(regexp).length; i++) { alert(regexp.test(temp)); alert(regexp.lastIndex); } temp.match(regexp).length  这个匹配长度是4  为什么用来作为i循环长度后  lastIndex的位置就不对了。  求大神解答一下,感谢

解决方案 »

  1.   


    你for循环的判断直接用 i < temp.match(regexp).length
    这样每次循环一次后都执行一遍temp.match(regexp),而执行temp.match(regexp)之后regexp.lastIndex就会归0,下次循环中执行regexp.test(temp)还是从字符串的0位置开始检测。
    你for循环的判断改成 i < v 就好了。
    var v=temp.match(regexp).length;
    for (var i = 0; i < v; i++) {
    alert(regexp.test(temp));
    alert(regexp.lastIndex);
    }
      

  2.   

    两者所代表的意义是完全不同的,所以这两个数值没有什么关联性,不一样也正常的。temp.match(regexp).length // 正则带g参数时,表示匹配的个数,因为temp有4个HTML5,所以就是4了
    regexp.lastIndex  // 匹配的最后一个字符的位置 第1个HTML5的字符5的位置是5所以就是5了。在temp前面加一些字符a例如:
    var temp="aaaa HTML5 HTML5 HTML5 HTML5";
    你就能观察得到lastIndex的变化
      

  3.   

    lastIndex 通常是跟 regexp.exec 方法搭配使用的。
    从需求上来讲
    var temp="aaaa HTML2 HTML4 HTML6 HTML8";
    当你想匹配 var regexp=/html(\d+)/gi; 并且想知道每个数字是什么时,你就要用到 lastIndex 与 regexp.exec