我有以下字符串:
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和分组匹配是可能的,我只是无法弄清楚如何做到这一点所以一些帮助是适当的。
答案 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]
答案 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);