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

Retrieving Date from a URL string in Javascript/jQuery

本文关键字:字符串 检索 日期 URL 中的 Javascript jQuery      更新时间:2023-09-26

我有一个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场比赛,第二场不是我想要的。我相信这在我的正则表达式中是一件简单的事情。

我会尝试这个正则表达式/('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"]

试试这个。

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

所以我在我可爱的O’Reilly正则表达式书中发现了这个解决方案。

在再次查看我的regex之后,我意识到month[和day]表达式被方括号包围,这显然意味着捕获子模式。解决方案是这样的。

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,具体取决于URL。

还要注意,由于正确地排除了子模式,返回了单个值。