JS正则表达月份日期

时间:2013-05-18 17:42:52

标签: javascript regex

我使用的是使用JS正则表达式的简单indx。 他们说%date%变量与正则表达式相同

    (((J(anuary|uly|une))|February|(M(arch|ay))|(A(pril|ugust))|((Sept|Nov|Dec)ember)|October)|
    (jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec))[.,]{0,1}[\s]{0,1}[0-9]{1,2}[.,]{0,1}[\s]{0,1}(19|20|)\d\d| 
    (0[1-9]|[12][0-9]|3[01]|[1-9])(th|rd|st|nd){0,1}[\s]{0,1}(day\s){0,1}(of\s){0,1}(((J(anuary|uly|une))|February|
    (M(arch|ay))|(A(pril|ugust))|((Sept|Nov|Dec)ember)|October)|(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec))[.,]{0,2} 
     [\s]{0,1}(19|20|)\d\d| (0[1-9]|1[012]|[1-9])[- /.](0[1-9]|[12][0-9]|3[01]|[1-9])[- /.](19|20|)\d\d|(0[1-9]|
     [12][0-9]|3[01]|[1-9])[- /.](0[1-9]|1[012]|[1-9])[- /.](19|20|)\d\d|(19|20|)\d\d[- /.](0[1-9]|1[012]|[1-9])[-  
     /.](0[1-9]|[12][0-9]|3[01]|[1-9])

但这不起作用。 我需要让它捕获数字或数字和月份名称中的日期 这是我到目前为止所得到的,但似乎无法弄清楚我是如何捕获2012年5月的

对于数字日期

(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d|(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])

月份名称(但不完整。应该是2012年5月5日)

(?<Month>((Jan(uary)?)|(Feb(ruary)?)|(Mar(ch)?)|(Apr(il)?)|(May)|(June?)|(July?)|(Aug(ust)?)|(Sep(t(ember)?)?)|(Oct(ober)?)|(Nov(ember)?)|(Dec(ember)?)))\s*[ ,-]\s*(?<Date>(([12][0-9])

任何人都可以提出建议

1 个答案:

答案 0 :(得分:2)

这是一个(更容易理解,我希望)正则表达式适用于像你这样的案例:

var monthsWords = "(jan(uary)?|feb(ruary)?|mar(ch)?|apr(il)?|may|june?|july?|aug(ust)?|sep(tember)?|oct(ober)?|nov(ember)?|dec(ember)?)";
var monthsNos = "((0?[1-9])|1[0-2])";
var months = "(("+monthsWords+")|("+monthsNos+"))";
var days = "((0?[1-9])|([12][0-9])|(3[0-1]))";
var years = "\\d{4}";
var separator = "[. /-]";
var pattern = months + separator + days + separator + years;
var regexp = new RegExp(pattern, "i");
regexp.compile(regexp); 
var result=regexp.test("May 4 2012");

当然,如果您需要更多灵活性(例如数月和日的反向顺序),则需要修改模式。另外,我假设任何四位数字符串都是有效年份,您可能还需要修改它。注意使用“i”标志使模式区分不敏感。