结果是javascript的原因是什么?

时间:2014-01-04 02:38:15

标签: javascript regex

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));

为什么第一个会捕获两个空字符串,而第二个只能包含一个空字符串?

1 个答案:

答案 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。那么,这只是因为它以每场比赛的比赛长度为前提,这里的长度为零。