这是我的第一个问题。这让我困惑了两天。我有一个项目列表,我需要获取包含此模式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');
}
});以下是内容。
玩具反斗城( Toys R Us )圣诞节前夕(68%) 1/05/2012 --纽约(http://www.thestreet.com/story/11353279/1/toys-r-us-open-through-christmas-eve.html) --是时候挤出更多午夜购物的时间了。类似的结果Jeanine Skowronski
2011年新增就业最多的城市(68%) 1/05/2012-纽约(http://www.thestreet.com/story/11351046/1/cities-adding-the-most-jobs-in-2011.html) --美国大部分地区仍在等待经济复苏来提振当地就业市场,但在圣安东尼奥,似乎经济衰退从未出现过类似的结果赛斯·费格曼
美国国会支持率创历史新低(68%) 1/05/2012 --纽约(http://www.thestreet.com/story/11353209/1/congress-approval-rating-hits-all-time-low.html) --就在情况似乎不能再糟的时候,国会的支持率又创新低。类似的结果Seth Fiegerman
发布于 2012-01-07 02:11:14
我会进行一点代码重组:find/ would构造非常笨拙,我会重新标记我的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构造函数要高效得多。
https://stackoverflow.com/questions/8761823
复制相似问题