javascript正则表达式

javascript正则表达式,javascript,regex,Javascript,Regex,我试图通过JS中的正则表达式从字符串中提取日期、月份和年份(如果存在)。我的输入字符串可以是“4月13日我回家”或“4月13日我回家”或“2015年8月31日,我回家”,在所有情况下,我都希望提取月份日期和年份,以便以后我可以更改其格式,如DD/MM/YYYY。如果一年不存在,我会选择现在的一年 我试过使用正则表达式: > var reg = > /\b(?:(?:jan|feb)?r?(?:uary)?|mar(?:ch)?|apr(?:il)?|may|june?|july?|a

我试图通过JS中的正则表达式从字符串中提取日期、月份和年份(如果存在)。我的输入字符串可以是“4月13日我回家”或“4月13日我回家”或“2015年8月31日,我回家”,在所有情况下,我都希望提取月份日期和年份,以便以后我可以更改其格式,如DD/MM/YYYY。如果一年不存在,我会选择现在的一年

我试过使用正则表达式:

> var reg =
> /\b(?:(?:jan|feb)?r?(?:uary)?|mar(?:ch)?|apr(?:il)?|may|june?|july?|aug(?:ust)?|oct(?:ober)?|(?:sept?|nov|dec)(?:ember)?)\s+\d{1,2}/ig
但它只匹配4月13日,如何匹配4月13日或4月13日,还可以分割月份和日期,以便稍后将其转换为DD/MM/YYYY格式

这是小提琴。
谢谢

为了解析这些字符串,我建议让正则表达式更简单,并在代码中添加一些逻辑。这将使它变得容易

基本上,您要匹配的是
(月)(日)
(日)(月)
,后跟可选的
(年)

这就变成了:

((month) (day))|((day)(st|th) (month)( )?(year)?)
现在用
[0-9]+
代替日和年,最后用
[a-zA-Z]+
代替月以保持简单

(([a-zA-Z]+) ([0-9]+))|(([0-9]+)(st|th) ([a-zA-Z]+)( )?([0-9]+)?)
这还匹配
st
th
以及年前可能的空格。因此,通过应用非捕获组操作符
(?:)
,使该非捕获成为:

(([a-zA-Z]+) ([0-9]+))|(([0-9]+)(?:st|th) ([a-zA-Z]+)(?: )?([0-9]+)?)

该正则表达式适用于:

/\b\s*(\d*)\s*(?:st|th|nd)*\s* (?:(?:jan|feb)?r?(?:uary)?|mar(?:ch)?|apr(?:il)?|may|june?|july?|aug(?:ust)?|oct(?:ober)?|(?:sept?|nov|dec)(?:ember)?)\s*(\d*)(?:st|th|nd)*\s* (\d*)/ig

是fiddle

对问题投了否决票的人,如果你能提供帮助,请告诉我答案,那么就没有必要投否决票,我已经做了这方面的研究,fiddle你可以看到,我能够得到一个案例。很容易否决投票,然后继续前进。人们在stackoverflow上发布他们没有得到解决方案时,不要拒绝匿名投票,首先在这里留下评论,并解释为什么它是错误的问题你好,蒂姆,我的输入字符串可以包含类似“我的航班是12月3日”或“我申请了12月4日的休假”或“12月3日我正在休假”的任何内容。所以我需要匹配它的有效月份{dec/december},然后从后缀和月份名称的前缀中获取它的日期。我把小提琴挂在上面,我可以和四月的小提琴相配13@Bhupendra这就是我所说的代码中的逻辑。因为将其包含在正则表达式中很容易使其难以维护。您可以从匹配中获取月份,并使用一些JavaScript或其他正则表达式(如:
(Jan | Feb | Etc)|(一月|二月| Etcetc)
,使用不区分大小写的修饰符处理。
/\b\s*(\d*)\s*(?:st|th|nd)*\s* (?:(?:jan|feb)?r?(?:uary)?|mar(?:ch)?|apr(?:il)?|may|june?|july?|aug(?:ust)?|oct(?:ober)?|(?:sept?|nov|dec)(?:ember)?)\s*(\d*)(?:st|th|nd)*\s* (\d*)/ig