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的位置就不对了。 求大神解答一下,感谢
你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);
}
regexp.lastIndex // 匹配的最后一个字符的位置 第1个HTML5的字符5的位置是5所以就是5了。在temp前面加一些字符a例如:
var temp="aaaa HTML5 HTML5 HTML5 HTML5";
你就能观察得到lastIndex的变化
从需求上来讲
var temp="aaaa HTML2 HTML4 HTML6 HTML8";
当你想匹配 var regexp=/html(\d+)/gi; 并且想知道每个数字是什么时,你就要用到 lastIndex 与 regexp.exec