var re1=new RegExp("","g");
var str1="a";
console.log(str1.match(re1));
var re2=new RegExp("","g");
var str2="a";
console.log(re2.exec(str2));
console.log(re2.exec(str2));
为什么第一个会捕获两个空字符串,而第二个只能包含一个空字符串?
答案 0 :(得分:2)
简而言之:它没有。
js> var re1 = new RegExp("", "g");
js> var str1 = "a";
js> str1.match(re1)
["", ""]
js> var re2 = new RegExp("", "g");
js> var str2 = "a";
js> re2.exec(str2)
[""]
js> re2.exec(str2)
[""]
这些[""]
中的每一个都是结果,因为exec
意味着在循环中调用并检索所有匹配和所有组,如:< / p>
var pairs = /(.).*?\1/g;
var input = "._. ^.^ -__-";
var match;
while (match = pairs.exec(input)) { // exec() returns null on /g regexes when there are no more matches
console.log(match);
}
一个更有趣的问题可能是为什么re2.lastIndex
在匹配后不会改变,所以你可以永远得到相同的匹配,它永远不会是null
。那么,这只是因为它以每场比赛的比赛长度为前提,这里的长度为零。