2015-10-17 76 views
1

我有一個日期字符串這樣,提高前瞻正則表達式

'2015-09-24T03:45:19-0700 +0530' 

我提取日期和時間,像下面

match(/[0-9]+:+[0-9]+:[0-9]+(?=.*?-)/) // returns 03:45:19 
match(/[0-9]+-+[0-9]+-[0-9]+(?=.*?T)/) // returns 2015-09-24 

是否有改善上述正則表達式的方法嗎?

編輯:

當我嘗試new Date('2015-09-24T03:45:19-0700 +0530')它說,因爲這是本地化的日期無效日期。那是當我嘗試正則表達式來評估另一種方法。現在,我用" "替換"T"並使用new Date來安定下來。它工作正常。

+0

爲什麼這樣的事情複雜化。您可以使用[((\ d {2}:?){3})](https://regex101.com/r/cS8oZ5/1)和[(\ d {4} - (\ d {2} - ?){2})](https://regex101.com/r/cS8oZ5/2) – Tushar

+0

它看起來很好,除非它們是一個單獨的數字,例如''2015-09-24T03:5:19 -0700 + 0530'' – Exception

+1

如何[[az \]((\ d {1,2}:?){3})](https://regex101.com/r/cS8oZ5/3) – Tushar

回答

1

正則表達式是一個矯枉過正的地方。您可以使用substrsplit假設字符串的格式將是相同

  1. 拆分得到的字符串由T

var str = '2015-09-24T03:45:19-0700 +0530'; 
 

 
var arr = str.substr(0, str.lastIndexOf('-')).split('T'); 
 

 
var date = arr[0], 
 
    time = arr[1]; 
 

 
document.getElementById('output').innerHTML = 'Date = ' + date + ' <br />Time = ' + time;
<pre id="output"></pre>
取下字符串毫秒和時區


編輯

lastIndexOf不會爲負時區工作,恩。 -530。在這種情況下,可以使用匹配-後跟四位數字的正則表達式來拆分字符串。

var str = '2015-09-24T03:45:19-0700 -0530'; 
 

 
var arr = str.split(/-\d{4}/)[0].split('T'); 
 
var date = arr[0], 
 
    time = arr[1]; 
 

 
document.getElementById('output').innerHTML = 'Date = ' + date + ' <br />Time = ' + time;
<pre id="output"></pre>

+0

好吧,工作:)可能是我們可以使用這個''2015-09-24T03:45:19-0700 + 0530'.split(/ [T - ] /)''來改善它嗎? – Exception

+0

Upvote解決方案。 – Exception

+0

@Exception這會將日期分成年,月和日。有額外的費用再次加入他們 – Tushar

2

您可以分割上的空間中,並使用Date.parse()以獲得所期望的結果:

yourDate = new Date(Date.parse('2015-09-24T03:45:19-0700 +0530'.split(' ')[0])) 

"T"正確由Date.parse()解釋。

然後,您可以使用任何方法的日期。

+0

它錯過了時間,請看看我的編輯問題 – Exception

+0

Upvote for solution。 – Exception