2009-05-20 56 views
6

我想要使用正則表達式來獲取鏈接文本。有可能有幾個鏈接可能符合這種模式,我想直到第四個才能獲得最遠的鏈接。這裏是我的JS代碼:Javascript正則表達式 - exec無限循環

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

的問題是,這個代碼進入IE上的無限循環(行之有效的FF),雖然模式存在。任何幫助表示讚賞。

+0

此代碼實際使用工作長達FF3.6,因爲同一個RegExp對象已在每次迭代中重用(符合ES3)。但是隨後ES3被ES5取代,它改變了RegExp字面值的處理方式:「正則表達式字面值現在每次評估字面值時都會返回一個唯一對象。」在你的情況下,有效地渲染`g`標誌是無用的。 http://es5.github.com/#E再一次,IE瀏覽器超過了它的時間。 – Robert 2013-03-26 00:57:41

回答

8

RegExp.exec,我相信,利用了lastIndex財產,並不斷對其進行修改,使之類的「全局組捕獲」的可能;它的工作你需要有一個單一的正則表達式。目前,正在創建在每個迭代上,所以它不會工作,一個新的...

試試這個:

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 ++; 
} 
+0

如果您在while語句中使用正則表達式,它實際上適用於Firefox,Chrome,Opera和Safari。 IE似乎是一個行爲不同的人。這並不是說IE所做的是錯誤的... – 2010-05-04 20:02:18