📅  最后修改于: 2023-12-03 15:16:08.063000             🧑  作者: Mango
在 JavaScript 中,lastIndex 属性是一个 RegExp 对象的属性,表示下一次匹配的起始索引。这个属性只有在使用正则表达式对象的 exec() 或 test() 方法时才有用处。
lastIndex 属性是一个可读可写的属性,可以通过点运算符或方括号访问。
let re = /cat/g;
console.log(re.lastIndex); // 0
可以看到,lastIndex 的初始值为 0。
当使用 exec() 或 test() 方法来匹配字符串时,lastIndex 属性会被设置为匹配的字符串的下一个字符的索引。
let str = "cat dog cat";
let re = /cat/g;
console.log(re.test(str)); // true
console.log(re.lastIndex); // 4
console.log(re.test(str)); // false
console.log(re.lastIndex); // 0
在上面的示例中,第一次 re.test(str) 返回 true,表示 str 中存在 "cat",并且 lastIndex 被设置为 4,即下一次匹配从 " dog cat" 的 "d" 开始。第二次 re.test(str) 返回 false,因为再次从起始位置匹配,并且 lastIndex 被重置为 0。
如果正则表达式的 global 标志设置为 false,则 lastIndex 属性没有任何作用。
let str = "cat dog cat";
let re = /cat/;
console.log(re.test(str)); // true
console.log(re.lastIndex); // 0
lastIndex 属性用于存储下一次匹配的起始索引。如果 global 标志为 false,则此属性无效。
lastIndex 属性经常用于迭代一个字符串,例如查找所有匹配项,可以使用 while 循环和 exec() 方法。
let str = "cat dog cat";
let re = /cat/g;
let match;
while ((match = re.exec(str)) !== null) {
console.log(`Found ${match[0]} at ${match.index}. Next starts at ${re.lastIndex}.`);
}
输出如下:
Found cat at 0. Next starts at 3.
Found cat at 8. Next starts at 0.