我保证你不是在说谎。这个用户脚本中有一个奇怪的行。其
if(rePrv.test(h)||rePrv.test(h))
现在,如果我只有if(rePrv.test(h))
,我有时会得到错误(错误)。但是用||我得到了正确的结果。它吹我的大脑。到底是怎么回事?谁能解释一下?它发生在firefox 8,11(便携式)和chrome 17.0下。
这是我的用户代码。
// ==UserScript==
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
// ==/UserScript==
var re=/\/?docs\/\d+/gi;
var rePrv=/\/?docs\/\d+\/private/gi;
var prvls="";
var publs="";
$('a').each(function(i, e){
var h = $(this).attr('href');
if(h==undefined)
return;
if(re.test(h)){
if(rePrv.test(h)||rePrv.test(h)){
prvls+="http://www.domain.com/"+h+"<br/>\n";
}
else {
publs+="http://www.domain.com/"+h+"<br/>\n";
}
}
});
答案 0 :(得分:4)
RegExp的每个实例都有一个internal state,e。 G。 lastIndex
指定开始下一场比赛的索引。如果您在exec
内部使用test
或其他任何使用exec
的方法,则使用global matching时该状态可能会发生变化。因此,多次调用test
可以在每次调用时获得不同的结果:
var str = 'foobar foobar';
var re = /foo/g;
alert(re.test(str) && re.lastIndex); // re.lastIndex === 3
alert(re.test(str) && re.lastIndex); // re.lastIndex === 10