第二个控制台日志如何返回null?

时间:2017-02-17 01:30:19

标签: javascript jquery regex

我不知道第二个console.log在第一个控制台返回null时返回1的原因

Code Source



var digit = /\d/g;

console.log(digit.exec("here it is: 1"));

console.log(digit.exec("and now: 1"));




如果我切换它们,它们都返回1



var digit = /\d/g;
console.log(digit.exec("and now: 1"));
console.log(digit.exec("here it is: 1"));




我开始通过阅读上面提供的链接来学习RegEx

exec到底做了什么?。

1 个答案:

答案 0 :(得分:6)

var digit = /\d/g;

console.log(digit.exec("here it is: 1"));
console.log(digit.lastIndex);

console.log(digit.exec("and now: 1"));

var digit2 = /\d/g;

console.log(digit2.exec("and now: 1"));
console.log(digit2.lastIndex);
console.log(digit2.exec("here it is: 1"));

如果运行上述内容,您将看到exec向正则表达式添加lastindex属性,并将其用作下一次搜索的起始索引。当它是较短的字符串时(就查找第一个数字而言),它会在两个exec中找到数字。当较长的字符串是第一个时,lastIndex实际上超过了第二个(较短的)字符串中的数字,因此它返回null

仅当您使用/ / g标志时才会发生这种情况。没有g,它会按预期工作,因为每个lastIndex exec都会重置为0:

var digit = /\d/;

console.log(digit.exec("here it is: 1"));
console.log(digit.lastIndex);
console.log(digit.exec("and now: 1"));