nodejs 正则匹配,cpu达到100%的问题

代码如下:

        
        let rules = '/\<div[\s\S]*?class\="bbs\-content[\s\S]*?clearfix"\>([\s\S]*?)\<div[\s\S]*?id\="alt_action"[\s\S]*?class\="clearfix"\>/gi';
         
        let str = '';//这个str实在太大了,没法贴出来。就是网页http://bbs.tianya.cn/post-free-5648072-1.shtml的源代码
         
        let results = [];


        let exps = eval(rules);
        let result;
        let i = 0;

        while((result = exps.exec(str) ) != null){
                console.log('a'+i);
                i++;
                if(i > 1000){
                    console.log('aaaaaa');
                    return;
                }
             results.push(result);
        }

只要一运行,cpu占用就达到100%,起初我以为while循环无终止的情况,所以检测了i变量,发现只循环一次而已。
但是是什么导致了cpu占用这么高呢?


我在在线正则测试,这个网站 http://tool.oschina.net/regex/ 里面,测试了一下,页面直接卡死了。

阅读 3.4k
2 个回答

目测你卡死的地方在 <div ...> 因为每一个div 都要匹配查找一下

修改表达式为

<div\sclass="bbs-content[^"']*clearfix">(.*?)<div\sid="alt_action"[^>]*class="clearfix">

他们一般不会乱改div的结构,所以以上表达式是可以匹配到的

速度可以快1倍以上

clipboard.png

可以看到下面的$0 $1 已经匹配到了

正则表达式的g 描述符去掉。

推荐问题