Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式-exec无限循环_Javascript_Regex - Fatal编程技术网

Javascript正则表达式-exec无限循环

Javascript正则表达式-exec无限循环,javascript,regex,Javascript,Regex,我正在尝试使用正则表达式获取链接文本。有可能有几个链接,可能会匹配的模式,我想得到最远的一个,直到第四。以下是我的JS代码: var level=1; while ( _match = /<a href="http:\/\/www.mysite.com\/x\/(?:.*)>(.*)<\/a>/img.exec(_html)){ if (level < 5) (_anchor_text=_match[1]); level ++; } var级别=

我正在尝试使用正则表达式获取链接文本。有可能有几个链接,可能会匹配的模式,我想得到最远的一个,直到第四。以下是我的JS代码:

var level=1;
while ( _match = /<a href="http:\/\/www.mysite.com\/x\/(?:.*)>(.*)<\/a>/img.exec(_html)){
    if (level < 5)  (_anchor_text=_match[1]);
    level ++;
}
var级别=1;

虽然(_match=/
RegExp.exec
,但我相信,它利用了这个属性,并不断地修改它,使“全局组捕获”成为可能;为了让它工作,你需要有一个正则表达式。目前,你在每次迭代中都会创建一个新的正则表达式,所以它不会工作

试试这个:

var level = 1;
var pattern = /<a href="http:\/\/www.mysite.com\/x\/(?:.*)>(.*)<\/a>/img;
var _match;
while ( _match = pattern.exec(_html)){
     if (level < 5)  (_anchor_text=_match[1]);
     level ++;
}
var级别=1;

var pattern=/如果在while语句中使用regexp文本,它实际上可以在Firefox、Chrome、Opera和Safari上运行。IE的行为似乎有所不同。这并不是说IE的行为是错误的…@Ates,我认为这种行为是由于文本正则表达式被“缓存”所致内部..因此,当您重复使用一个时,您只是引用了相同的regex对象。此代码实际上一直使用到FF3.6,因为相同的RegExp对象在每次迭代中都被重用(符合ES3)。但随后ES3被ES5替换,这改变了处理RegExp文本的方式:“正则表达式文字现在每次计算文字时都返回一个唯一的对象。”在您的情况下,有效地使
g
标志无效。同样,IE领先于时代。