2012-06-26 74 views
0

我試圖克裏特島正則表達式,可以接受一般的SQL/JS日期,例如:正則表達式 - 不介意順序?

2012年2月31日

我已經取得一個正則表達式:

(0[1-9]|[12]\d|3[01])[ ]+(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)[ ]+[12]\d{3}$ 

,但我怎麼能告訴正則表達式來忽略項目的appearence順序:

,因此它可以接受:

Apr 31 2010 
    2010 Apr 31 
    ... 
    ... 

回答

3

一個使用的解決方案向前斷言:

var myregexp = /^(?=.*(\b[A-Za-z]{3}\b))(?=.*(\b\d{1,2}\b))(?=.*(\b\d{4}\b))/; 
var match = myregexp.exec(subject); 
if (match != null) { 
    month = match[1]; 
    days = match[2]; 
    year = match[3]; 
} 

說明:

^    # Start of string 
(?=   # Look ahead to see if the following can be matched: 
.*   # Any number of characters 
(   # followed by (capturing this in group no. 1) 
    \b   # Start of word 
    [A-Za-z]{3} # Three ASCII letters 
    \b   # End of word 
)   # End of capturing group no. 1 
)    # End of lookahead assertion. 
(?=   # Look ahead to see if the following can be matched: 
.*   # Any number of characters 
(   # followed by (capturing this in group no. 1) 
    \b\d{1,2}\b # a one- or two-digit number 
)   # etc. 
) 
(?=   # Lookahead no. 3 
.* 
(
    \b\d{4}\b # a four-digit number 
) 
) 
+0

這是一個常規)表達式,順便說一句? :) – Kos

+0

@ tim你自己寫了文字評論,還是通過solftware?哪一個 ? –

+0

@RoyiNamir:我自己寫了。 –

1

您應該將字符集中到組中,然後您可以使用OR以它們在字符串中出現的不同順序接受它們。你不能構建一個可以處理任何命令的普通正則表達式 - 你必須清楚地指定它們發生的所有命令。

+1

要添加這樣的回答:您可以創建一個具有正則表達式爲每個組件變量(日,月,年) ,然後通過使用'|'以可接受的順序指定它們來創建一個正則表達式。例如'「(」+ DAY +「+」+ MONTH +「+」+ YEAR +「|」+ YEAR +「+」+ MONTH +「+」+ DAY +「)」' – nhahtdh