正则表达式将日期与字符串匹配为月份

时间:2015-05-26 07:18:57

标签: javascript regex

我有以下字符串:

var cur = "t+20d";

我想要匹配它。那部分我已经用

做了
if(cur.match(/^[t]\+[0-9]{2,4}[dmyw]/i))

现在我还需要能够匹配这个字符串,并且优先使用相同的正则表达式

var cur = "10may15+20d";

我试过了

  cur.match(/^([t]|([0-9]{1,2}(jan|feb|march|apr|may|jun|jul|aug|sept|okt|nov|dec)))\+[0-9]{2,4}[dmyw]/i) 

但它并没有按预期工作。

如果我尝试编译子部分,我得到两个数组而不是一个

 cur.match(/[0-9]{1,2}(jan|feb|march|apr|may|jun|jul|aug|sept|okt|nov|dec)/i);
 //yields ["10MaY", "MaY"]

这让我担心误报。

我在正则表达式上真的很生气,上次我尝试制作一个复杂的正则表达式是在15年前,那是在perl中,所以我真的可以用这个帮助。我知道ors和分组匹配是可能的,我只是无法弄清楚如何做到这一点所以一些帮助是适当的。

2 个答案:

答案 0 :(得分:1)

您需要匹配月份后存在的数字。

^(t|[0-9]{1,2}(?:jan|feb|march|apr|may|jun|jul|aug|sept|okt|nov|dec)\d+)\+[0-9]{2,4}[dmyw]

DEMO

答案 1 :(得分:1)

@AvinashRaj的帮助下,我指向了集团运营商?:凭借他的正则表达式,我设法为我的用途撰写此正则表达式,并在此处将其发布给可能需要匹配日期字符串的未来用户像这样。 DDMMMYY

cur  = "10-apr-1115+20d";
cur.match(/^(?:t|[0-9]{1,2}(?:jan|feb|mar|apr|may|jun|jul|aug|sep|okt|nov|dec|[-\/](?:[0-9]{1,2}|jan|feb|mar|apr|may|jun|jul|aug|sep|okt|nov|dec)[-\/])(?:[0-9]{2}|[0-9]{4}))\+[0-9]{1,4}[dmyw]/igm);