我有以下字符串:

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"]


这让我担心误报。

我对regex真的很生锈,上一次我尝试制作一个复杂的regex是15年前,那是在perl中的,所以我真的可以在此方面提供一些帮助。我知道ors和分组比赛是可能的,我只是不知道该怎么做,所以需要一些帮助。

最佳答案

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

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


DEMO

09-16 10:50