【问题标题】:Regular Expression to only grab date正则表达式仅获取日期
【发布时间】:2009-07-29 14:31:25
【问题描述】:

我对我的问题有一个解决方案,但我正试图在正则表达式方面做得更好,尤其是在 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 个结果,与其说这不起作用(因为我可以忽略数组中的第一个索引),而是这样我可以更好地学习使用正则表达式。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    只要您的正则表达式中有括号,与这些括号匹配的值也会被返回。

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

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

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

    【讨论】:

    • 就像我说的那样,我并不十分关心它,因为我只是将它用作学习案例,只是想看看它是否可能(理论问题而不是实际问题)。
    【解决方案2】:

    我不认为你可以做到,但你可以做到

    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 开始循环。数组中的第一项是匹配项,然后组是该匹配项的子项

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多