代码如下:
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/ 里面,测试了一下,页面直接卡死了。
目测你卡死的地方在 <div ...> 因为每一个div 都要匹配查找一下
修改表达式为
他们一般不会乱改div的结构,所以以上表达式是可以匹配到的
速度可以快1倍以上
可以看到下面的$0 $1 已经匹配到了