2015-10-17 50 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