2012-01-06 25 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构造函数更有效。