这是我的第一个问题。这让我难过了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
答案 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构造函数更有效。