node里正则下表达式g模式下发现一个很有意思的问题。不知道是不是node的bug
发布于 2年前 作者 chinawomen 1308 次浏览

分别运行一下两段代码 求[[[[[[[[[[[[[[[[[[[[[[[[[@robbin](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin)](/user/robbin) 大神指点一二 运行第一段代码没有任何问题, 但是第二段代码运行的时候则会死掉,如果不及时关掉的话有可能会导致死机 代码运行版本 8.20 (node到处是坑啊)

function test(){
    var reg = /href=['"](.+?)['"]/gim;
    var str = '<link rel="stylesheet" type="text/ss" href="/c4.css" />';
    var result = reg.exec(str);
    while(result){
        console.log(result[1]);
        result = reg.exec(str);
    }
}
test();

下面的代码之比上边的代码少了一个g

function test(){
    var reg = /href=['"](.+?)['"]/im;
    var str = '<link rel="stylesheet" type="text/ss" href="/c4.css" />';
    var result = reg.exec(str);
    while(result){
        console.log(result[1]);
        result = reg.exec(str);
    }
}
test();
8 回复

加了g以后应该是把匹配指针记录在reg里面了,上一段代码能出来是因为reg的状态改变了,匹配指针没有重置……应该算是一个exec函数实现的bug吧……或者是feature?

好吧……不是Feature……因为在exec返回null以后……用来实现g的指针(计数器?)被重置了……

在github给node.js提bug了

@shinohane 在github给node.js提bug了

@shinohane 擦 文档没看仔细 reg的exec方法如果不是全局模式每次exec每次检索都是从0开始。这样的话就是个死循环了

@chinawomen 是这样~你的第一份代码得出能跳出循环的结果是错误的~有Bug在这里……第二个跳不出的才是正确的结果……

回到顶部