改进向前看正则表达式

Improve lookahead regex

本文关键字:正则表达式 向前看      更新时间:2023-09-26

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

'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

您可以对空间进行分割,并使用Date.parse()来获得所需的结果:

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

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

您可以使用任何日期方法

Regex在这里是多余的。您可以使用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;
<pre id="output"></pre>


编辑

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

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>