对js的对象有一些不明白的地方,求解释?

发布于 2022-09-02 23:47:39 字数 522 浏览 10 评论 0

写的js代码如下:

        var myRe=/ab*/g;
        var str='abbcdefabh';
        var myArray1 = myRe.exec(str);
        console.dir(myRe);
        console.dir(myRe.lastIndex);
        var myArray2 = myRe.exec(str);
        console.dir(myRe);
        console.dir(myRe.lastIndex);

打印结果如下图:
图片描述

那么问题来了:
1.为什么两次打印的myRe是一个样子的?
2.为什么两次打印的myRe.lastIndex却是不同的?

求教!!!

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

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

发布评论

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

评论(2

梦里南柯 2022-09-09 23:47:39

MDN 官网文档
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec#示例

当正则表达式使用 "g" 标志时,可以多次执行 exec 方法来查找同一个字符串中的成功匹配。当你这样做时,查找将从正则表达式的 lastIndex 属性指定的位置开始。(test() 也会更新 lastIndex 属性)。

拿命拼未来 2022-09-09 23:47:39

引用w3school网站上的解释:
lastIndex存放一个整数,它声明的是上一次匹配文本之后的第一个字符的位置。
上次匹配的结果是由方法 RegExp.exec() 和 RegExp.test() 找到的,它们都以 lastIndex 属性所指的位置作为下次检索的起始点。这样,就可以通过反复调用这两个方法来遍历一个字符串中的所有匹配文本。
该属性是可读可写的。只要目标字符串的下一次搜索开始,就可以对它进行设置。当方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0。

如下图,是我试验的一个demo,三次查找字符串中的a标签,出现的lastIndex值分别为1,5,9。这跟字符串中的a位置是一样的。
图片描述

当你将lastIndex再重置为0时,下一次执行exec,打印的结果就跟第一次一样了

JavaScript lastIndex 属性

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