3

我正在使用使用 JS 正则表达式的简单索引。他们说 %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 月 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])

任何人都可以建议

4

1 回答 1

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”标志使模式不区分大小写。

于 2013-05-25T14:04:36.347 回答