js中,exec()方法,为何这里的index是5?

发布于 2022-09-01 12:01:57 字数 551 浏览 11 评论 0

js高程里的例子(书中P107),不明白为何下面的第二次执行,alert(matches.index)的值是5?为何alert(matches[0])是bat?应该是我exex()方法没理解透。

var text="cat,bat,sat,fat";
var pattern1=/.at/g;
var matches=pattern1.exec(text);
alert(matches.index);//0
alert(matches[0]);//cat
alert(pattern1.lastIndex);//3

----------

matches=pattern1.exec(text);
alert(matches.index);//5
alert(matches[0]);//bat
alert(pattern1.lastIndex);//8

搜索之后,"有g对exec本身的影响是,当一个具有g的正则表达式调用exec()时,他将该对象的lastIndex设置到紧接这匹配子串的字符位置.当第二次调用exec时将从lastIndex所指示的字符位置开始检索"看到这句话仍然没能理解,为何输出是5?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一花一树开 2022-09-08 12:01:57

至于为什么是4和7,那就是因为

将该对象的lastIndex设置到紧接这匹配子串的字符位置.当第二次调用exec时将从lastIndex所指示的字符位置开始检索。

咱们按逗号之后不加空格来说:你看,第一次检索出来的是cat,第一个字符的索引是0,所以result.index是0,而此时一个检查字符串中每个字符的指针ptr已经走到t后面了,所以lastIndex是3,就是相当于告诉正则表达式,我们已经检查到索引为3的地方了,下一次直接从这里开始就好了。
第二次检索从lastIndex也就是3开始,找到后面的bat之后,匹配成功,bat里第一个字符b是4,所以result.index是4,而我们匹配完整个bat的时候,指针ptr已经走到bat后面了,也就是索引为7的位置,所以结果是4和7。
这样你再开始下一次检索的时候,就会从text[7]开始,也就是第二个逗号的位置开始往后找,所以下一次匹配是8, sat, 11,再下次12, fat, 15。
现在到头了,再匹配一次的话就是null了,这时候你看看pattern1.lastIndex,已经回到0了。

╰ゝ天使的微笑 2022-09-08 12:01:57

可以参考我以前的一篇Blog,希望等你理解有帮助。

http://www.netingcn.com/javascript-regexp.html

生生不灭 2022-09-08 12:01:57

按照我自己对这句话"有g对exec本身的影响是,当一个具有g的正则表达式调用exec()时,他将该对象的lastIndex设置到紧接这匹配子串的字符位置.当第二次调用exec时将从lastIndex所指示的字符位置开始检索"的理解,我认为第二次执行exec()方法结果是:

alert(matches.index);//4
alert(matches[0]);//fat
alert(pattern1.lastIndex);//7

新的问题是,为何matches[0]输出的是bat?运行之后,输出的是4,bat,7为何与书中的不一样呢?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文