【问题标题】:Extract month, day and year from date regex从日期正则表达式中提取月、日和年
【发布时间】:2015-01-12 02:56:33
【问题描述】:

我有一个“mm/dd/yyyy”格式的日期。但是,根据日期或月份,不能保证“mm/dd”部分一定有两位数。所以日期可能是:

11/12/2014

6/12/2014

11/5/2014

在上述所有情况下,我都需要能够提取 mmddyyyy 的每个值,这样我就可以进行类似的计算:

Month = regex that returns month part.
Day = regex that returns day part
Year = regex that returns 4 digits year part.

这个\d{2}/\d{2}/\d{2} 匹配整个事情。

【问题讨论】:

标签: javascript regex date


【解决方案1】:

正则表达式解决方案

匹配所有日期的正确正则表达式是:\d{1,2}/\d{1,2}/\d{4}。符号 {n,m} 被称为限制重复,在这种情况下,\d{n,m} 表示“介于 n 和 m 位(包括)之间”。您可以在此处阅读更多相关信息:Limiting Repetition

如果要创建匹配组,请使用“(”和“)”(括号)。此外,在 JavaScript 中,您必须使用 \ 转义 /,因此您的正则表达式为:/(\d{1,2})\/(\d{1,2})\/(\d{4})/

您可以使用正则表达式的exec 函数来匹配字符串。它返回一个包含匹配文本的数组作为第一个元素,然后为每个匹配的组返回一个项目。

您可以在 MDN RegExp.prototype.exec 上找到更多信息或查看以下示例:

const datePattern = /(\d{1,2})\/(\d{1,2})\/(\d{4})/;
const date = datePattern.exec("11/12/2014"); // ["11/12/2014", "11", "12", "2014"]

注意:如果传递了无效字符串(不匹配正则表达式)exec 函数将返回null。这是一种简单验证用户输入或数据的简单方法。

替代解决方案

或者,您可以简单地拆分字符串:

"11/12/2014".split('/'); // ["11", "12", "2014"]

但是无论字符串实际包含什么,这都会起作用(它可能包含字符串"ba/tm/an",并且 split 仍将返回一个包含三个元素的数组)。因此,如果您想验证日期,Regexp 可能更适合。

【讨论】:

  • 感谢您的广泛解释和“拆分”替代方案。当然,我急于使用正则表达式时再次忽略了这一点:)
【解决方案2】:

您不需要正则表达式来提取片段,只需使用split。我使用正则表达式来允许正斜杠或反斜杠。

var date = "1/10/2014"
, dateParts = date.split(/\\|\//)
, month = dateParts[0]
, day = dateParts[1]
, year = dateParts[2];

【讨论】:

    【解决方案3】:

    试试这个:

    var str = "11/6/2014";
    var match = str.match(/(\d{1,2})\/(\d{1,2})\/(\d{4})/);
    
    console.log(match[1]); // => "11"
    console.log(match[2]); // => "6"
    console.log(match[3]); // => "2014"
    

    您也可以创建一个日期对象:

    var date = new Date("11/6/2014");
    
    var year = date.getFullYear();
    var month = date.getMonth()+1;
    var day = date.getDate();
    
    console.log(year);  // => 2014
    console.log(month); // => 11
    console.log(day);   // => 6
    

    【讨论】:

      猜你喜欢
      • 2019-09-27
      • 2015-12-25
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多