3

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 月 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");

もちろん、より柔軟性が必要な場合 (月と日の逆順など) は、パターンを変更する必要があります。また、任意の 4 桁の文字列が有効な年であると想定したので、それも変更する必要があるかもしれません。パターンの大文字と小文字を区別しないようにするために、「i」フラグを使用していることに注意してください。

于 2013-05-25T14:04:36.347 に答える