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

写的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却是不同的?

求教!!!

阅读 2.4k
2 个回答

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

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

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

JavaScript lastIndex 属性

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进