改善前瞻性正则表达式

时间:2015-10-17 07:51:16

标签: javascript regex

我有一个这样的日期字符串,

'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')时,它表示无效日期,因为这是本地化日期。那是我试用Regex评估另一种方法的时候。现在,我决定将"T"替换为" "并使用new Date。它工作正常。

2 个答案:

答案 0 :(得分:2)

您可以拆分空格,并使用Date.parse()获得所需的结果:

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

"T"正确解释Date.parse()

然后,您可以使用任何方法来约会。

答案 1 :(得分:1)

正则表达式在这里是一种矫枉过正。您可以使用substrsplit假设字符串的格式相同

  1. 从字符串
  2. 中删除毫秒和时区
  3. T
  4. 拆分生成的字符串

    
    
    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;
    &#13;
    <pre id="output"></pre>
    &#13;
    &#13;
    &#13;

    修改

    lastIndexOf不适用于负时区,例如。 -530。在这种情况下,您可以使用匹配-后跟四位数的正则表达式来分割字符串。

    &#13;
    &#13;
    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;
    &#13;
    <pre id="output"></pre>
    &#13;
    &#13;
    &#13;