正则表达式match和lastindex疑问

weixin_45002975 2019-08-01 07:07:14
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的位置就不对了。 求大神解答一下,感谢
...全文
97 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
医手 2019-08-02
  • 打赏
  • 举报
回复
lastIndex 通常是跟 regexp.exec 方法搭配使用的。 从需求上来讲 var temp="aaaa HTML2 HTML4 HTML6 HTML8"; 当你想匹配 var regexp=/html(\d+)/gi; 并且想知道每个数字是什么时,你就要用到 lastIndex 与 regexp.exec
医手 2019-08-02
  • 打赏
  • 举报
回复
两者所代表的意义是完全不同的,所以这两个数值没有什么关联性,不一样也正常的。 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的变化
天际的海浪 2019-08-01
  • 打赏
  • 举报
回复
你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); }

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧