Javascript regex.match有缺陷吗?

Javascript regex.match有缺陷吗?,regex,firefox,google-chrome,Regex,Firefox,Google Chrome,我向你保证我没有撒谎。这个用户脚本中有一行奇怪的代码。其 if(rePrv.test(h)||rePrv.test(h)) 现在如果我只有if(rePrv.test(h))我有时会得到一个false(错误)。然而,使用| |我得到了正确的结果。这让我大吃一惊。发生了什么事?有人能解释一下吗?它发生在Firefox8、11(便携式)和Chrome17.0下 这是我的用户脚本代码 // ==UserScript== // @require http://ajax.googleapi

我向你保证我没有撒谎。这个用户脚本中有一行奇怪的代码。其

if(rePrv.test(h)||rePrv.test(h))
现在如果我只有
if(rePrv.test(h))
我有时会得到一个false(错误)。然而,使用| |我得到了正确的结果。这让我大吃一惊。发生了什么事?有人能解释一下吗?它发生在Firefox8、11(便携式)和Chrome17.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";
        }
    }
});
/==UserScript==
//@需要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')。每个(函数(即,e){
var h=$(this.attr('href');
if(h==未定义)
返回;
if(重新测试(h)){
if(重复试验(h)| |重复试验(h)){
prvls+=”http://www.domain.com/“+h+”
\n”; } 否则{ publs+=”http://www.domain.com/“+h+”
\n”; } } });
的每个实例都有一个。指定开始下一个匹配的索引。如果您在内部调用或任何其他方法使用
exec
,则在使用时,该状态可能会更改。因此多次调用
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

但这仍然是f'd。我想得到一个可复制的。这是。。。搞砸了。@acidzombie24它是可复制的。@acidzombie24,只需删除
/g
。你为什么把它放在那里?我还是很困惑。移除g确实修复了它,但为什么会影响到任何东西?我的意思是,为什么上一个索引要进行下一个测试()?我忘了为什么,但使用/g成了一种习惯。也许多行替换?我不是sure@acidzombie24,“为什么最后一个索引要进行下一个测试()?”因为您使用了
/g