从Javascript / jQuery中的URL字符串中检索日期

时间:2013-06-26 13:19:15

标签: javascript regex url date

我有一个WordPress网站,我使用AJAX来更新存档而不是页面重新加载(用非常基本的术语)。

所以我可以通过:

http://mysite.com/events/2012/10/17
http://mysite.com/events/2012/10
http://mysite.com/events/2012

我正在寻找一个可以检索其中任何一个的JS / jQuery正则表达式方法。到目前为止,我有以下内容:

var linkUrl = 'http://mysite.com/events/2012/10';
var linkDate = linkUrl.match(/\d{4}(\/\d{2})+/);
console.log( linkDate ); // output - ["2012/10", "/10", index: 8, input: "/events/2012/10"] 

它似乎找到了2场比赛,其中第二场并不是我想要的。我确信这在我的正则表达式中很简单。

3 个答案:

答案 0 :(得分:2)

我会试试这个正则表达式/(\d{4})(?:\/(\d{2}))?(?:\/(\d{2}))?$/

'http://mysite.com/events/2012'.match(/(\d{4})(?:\/(\d{2}))?(?:\/(\d{2}))?$/)
// => ["2012", "2012", undefined, undefined]

'http://mysite.com/events/2012/03'.match(/(\d{4})(?:\/(\d{2}))?(?:\/(\d{2}))?$/)
// => ["2012/03", "2012", "03", undefined]

'http://mysite.com/events/2012/03/21'.match(/(\d{4})(?:\/(\d{2}))?(?:\/(\d{2}))?$/)
// => ["2012/03/21", "2012", "03", "21"]

答案 1 :(得分:0)

所以我在我可爱的O'Reilly正则表达书中找到了解决方案。

再次查看我的正则表达式之后,我意识到月份[和日期]表达式被括号括起来,这显然意味着捕获子模式。解决方案就是这样。

var linkUrl = "/events/2012/10/25";
var linkDate = linkUrl.match(/\d{4}(?:\/\d{2})*/);
// output - ["2012/10/25", index: 8, input: "/events/2012/10/25"] 

我在括号中添加了?:,告诉match不捕获子字符串。现在,我会尊重2012/10/172012/10,具体取决于网址。

还要注意由于正确排除子模式而返回的单个值。

答案 2 :(得分:0)

试试这个。

(?<=/)[0-9]{4}(/[0-9]{1,2})?(/[0-9]{1,2})?