node里正则下表达式g模式下发现一个很有意思的问题。不知道是不是node的bug
分别运行一下两段代码 求@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在这里……第二个跳不出的才是正确的结果……
+1