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

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

求教!!!


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

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

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

JavaScript lastIndex 属性


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

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

【热门文章】
【热门文章】