2009-07-29 221 views
0

我有我的问题的解决方案,但我试图让正则表达式更好,特别是在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

无论何时,如果在正则表达式中有括号,那么匹配那些括号的值也会被返回。

  • time[0]就是整个表达式
  • time[1]是匹配什么匹配([\ d] {4}),即年
  • time[2]是什么第一([\ d]匹配{2} ),即每月
  • time[3]就是第二([\ d]匹配{2}),即日期

你不能改变这种行为,以去除time[0],你不要再盟友想(因为底层代码已经生成它,删除它不会带来任何性能优势)。

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

+0

就像我说过的,我并不关心它,因为我只是用它作为学习案例,只是想看看它是否可能(理论问题而非实际问题)。 – MacAnthony 2009-07-29 14:53:25

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数组中的第一项匹配,然后组是儿童那匹配