使用jquery和regex匹配项列表中的多个匹配项

时间:2012-01-06 17:25:53

标签: jquery regex

这是我的第一个问题。这让我难过了2天。我有一个项目列表,我需要获取包含此模式的所有匹配项MM / DD / YYYY ... http://www.someurl.com。我正在使用jquery,这就是我现在拥有的。当我期待它提醒3次时,它只发出一次警报。

$('#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) - 是时候挤进更多的午夜了购物。类似的结果 Jeanine Skowronski

2011年城市增加最多就业机会(68%) 01/05/2012 - 纽约(http://www.thestreet.com/story/11351046/1/cities-adding-the-most-jobs-in-2011.html) - 该国大部分地区仍在等待为了经济复苏以提升当地就业市场,但在圣安东尼奥市,经济衰退似乎从来没有类似的结果 Seth Fiegerman

国会批准评级创历史新低(68%) 01/05 / 2012-纽约(http://www.thestreet.com/story/11353209/1/congress-approval-rating-hits-all-time-low.html) - 就在看起来它似乎无法'更糟糕的是,国会的支持率已经创下新低。类似的结果 Seth Fiegerman

1 个答案:

答案 0 :(得分:0)

我会参与一些代码重组:find / children结构非常笨拙,我会重新标记我的HTML,不需要在父结构周围游荡。也就是说,我怀疑你的问题是RegExp的基本问题之一,因为这对我有用:

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一次然后反复使用它比每次交互重新调用RegExp构造函数更有效。