2012-01-06 26 views
1

這是我的第一個問題。這讓我耽擱了兩天。我有一個項目列表,我需要抓住所有包含這種模式的比賽MM/DD/YYYY ... http://www.someurl.com。我正在使用jquery,這是我現在擁有的。當我期待它提醒3次時,它只會發出一次警報。使用jQuery和正則表達式匹配項目列表中的多個匹配項

$('#news').parent().find('td').children('span.srNewsBlurb').each(function() { 
    var html = $(this).html(); 
    if(/(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/(.*http.*)/i.test(html)){ 
     alert('this works'); 
    } 
}); 

這裏是內容...

玩具反斗城打開通過聖誕平安夜(68%) 01/05/2012 - 紐約(http://www.thestreet.com/story /11353279/1/toys-r-us-open-through-christmas-eve.html) - 是時候擠進更多的午夜購物了。類似的結果 珍妮Skowronski

城市在2011年(68%) 01/05/2012添加的大多數工作 - 紐約(http://www.thestreet.com/story/11351046/1/cities-adding-這個國家大部分地區仍在等待經濟復甦來提升本地就業市場,但在聖安東尼奧看起來好像經濟衰退從未有過類似的結果 Seth Fiegerman

國會的批准評級創下歷史新低(68%) 01/05/2012-紐約(http://www.thestreet.com/story/11353209/1/congress-approval-rating-hits-all- time-low.html) - 就在它看起來不會變得更糟的時候,國會的支持率已經創下新低。類似的結果 Seth Fiegerman

回答

0

我會參與一個小代碼reorg:find/children結構非常尷尬,我會重新標記我的HTML,不需要在父結構中漫遊。這就是說,我懷疑你的問題是與正則表達式的一個根本問題,因爲這個工作對我來說:

var matcher = /(0?\d|1[012])\/(0?\d|[12]\d|3[01])((.|\s)*)/i; 
$('#news').parent().find('td').children('span.srNewsBlurb').each(function(i,o) { 
    rg = matcher.exec($(o).html()) 
    if (rg) { 
     console.log(rg[1], rg[2], rg[3]) 
    } 
}); 

請參閱((.|\s)*)對正則表達式的結尾構建? Javascript正則表達式很奇怪,它們通過\s運算符匹配回車/換行符,但不是運算符.。因此,如果您的HTML中包含原始行提要,則需要使用此表達式。而且,一次構建正則表達式然後反覆使用它比重新調用RegExp構造函數更有效。