我不知道第二个console.log在第一个控制台返回null
时返回1
的原因
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到底做了什么?。
答案 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"));