我有一个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场比赛,其中第二场并不是我想要的。我确信这在我的正则表达式中很简单。
答案 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/17
或2012/10
,具体取决于网址。
还要注意由于正确排除子模式而返回的单个值。
答案 2 :(得分:0)
试试这个。
(?<=/)[0-9]{4}(/[0-9]{1,2})?(/[0-9]{1,2})?