正则表达式仅获取日期

时间:2009-07-29 14:31:25

标签: javascript regex

我有一个问题的解决方案,但我正在努力改善正则表达式,尤其是在javascript中。我只是想把它带到社区,看看我是否能以更好的方式写这个。

所以,我得到一个来自.net的日期时间字符串,我需要从中提取日期。

目前我所拥有的是:

var time = "2009-07-05T00:00:00.0000000-05:00".match(/(^\d{4}).(\d{2}).(\d{2})/i);

正如我所说,这是有效的,但我希望能更直接地在数组中抓住年,月,日。我得到的是4个结果,第一个是YYYY-MM-DD,YYYY,MM,DD。

基本上我只想要返回3个结果,而不是这个不起作用(因为我可以忽略数组中的第一个索引),但这样我才能学会更好地使用正则表达式。

2 个答案:

答案 0 :(得分:2)

如果你的正则表达式中有括号,那么也会返回与这些括号匹配的值。

  • time[0]与整个表达式匹配
  • time[1]匹配([\ d] {4}),即年份
  • time[2]与第一个([\ d] {2})相匹配,即月份
  • time[3]与第二个([\ d] {2})相匹配,即日期

您无法更改此行为以删除time[0],并且您真的不想(因为底层代码已经生成它,删除它不会带来任何性能优势)。

如果您不关心从带括号的表达式中取回值,可以使用(?:expression)使其不匹配。

答案 1 :(得分:0)

我认为你不能这样做,但你可以做到

var myregexp = /(^\d{4})-(\d{2})-(\d{2})/g;
var match = myregexp.exec(subject);
while (match != null) {
    for (var i = 1; i < match.length; i++) {
        // matched text: match[i]
    }
    match = myregexp.exec(subject);
}

然后从索引1循环。数组中的第一项是匹配,然后组是该匹配的子项