【问题标题】:javascript extract date via regular expressionjavascript通过正则表达式提取日期
【发布时间】:2010-12-18 14:19:41
【问题描述】:

我对正则表达式了解不多,但是我有一个字符串(url),我想从中提取日期:

var myurl = "https://example.com/display/~test/2010/07/06/Day+2.+Test+Page";

我想从中提取2010/07/06,另外我想将其格式化为6th of July, 2010

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    不需要正则表达式。 split()slice() 的组合也可以:

    var myurl = "https://example.com/display/~test/2010/07/06/Day+2.+Test+Page";
    var parts = myurl.split("/");  // ["https:", "", "example.com", "display", "~test", "2010", "07", "06", "Day+2.+Test+Page"]
    var ymd   = myurl.slice(5,8);  // ["2010", "07", "06"]
    var date  = new Date(ymd);     // Tue Jul 06 2010 00:00:00 GMT+0200 (W. Europe Daylight Time)
    

    有几个全面的日期格式库,我建议你使用其中之一,不要尝试自己滚动。

    【讨论】:

    • 将数组传递给Date() 构造函数并不适用于所有浏览器。在 Internet Explorer 中,您必须使用 new Date(ymd[0], ymd[1] - 1, ymd[2]);
    • @Andy:感谢您的提示。你可能已经猜到了,我没有在 IE 中尝试过。
    • 是的,我确实猜到了 :-) 我一直记得 Internet Explorer 8 及更低版本的日期解析很差。我认为它在 9 中得到了改进,这要归功于 ECMAScript 5。
    • 感谢 Tomalak,但日期转换不起作用,因为它只接受没有 0 前缀的日期或月份。例如 2010, 7, 6 被接受,但 2010, 07, 06 不被接受。
    【解决方案2】:

    根据 URL 的变化方式,您可以使用以下内容:

    \/\d{4}\/\d{2}\/\d{2}\/
    

    上面将提取/2010/07/06/(两个斜杠只是为了更安全 - 您可以删除标题和尾随\/ 以获得2010/07/06,但如果URL 包含可能匹配的其他部分,您可能会遇到问题) .

    在此处查看在线正则表达式示例:

    这是 jsfiddle:

    要对其进行格式化,请查看例如这里:

    类似的东西(注意你需要上面的函数):

    var dt = new Date(2010, 6, 6);
    dateFormat(dt, "dS of mmmm, yyyy");
    // 6th of June, 2010
    

    【讨论】:

    • 您好 icyrock.com,感谢您的快速回复!您能否提供一个有关如何实现此正则表达式的示例?谢谢!
    • 感谢 icyrock.com,但日期转换不起作用,因为它只接受没有 0 前缀的日期或月份的日期。例如 2010, 7, 6 被接受,但 2010, 07, 06 不被接受。
    • @FLX 查看更新后的 jsfiddle 中的完整工作示例:jsfiddle.net/zwkDQ/1。我使用的是 Firefox,所以如果它不适合您并且您使用的是 IE,请尝试解析之前的字符串(即,而不是 p[1]parseInt(p[1]) 等等)。
    【解决方案3】:
    var myurl = "https://example.com/display/~test/2010/07/06/Day+2.+Test+Page";
    
    var re = /(\d{4})\/(\d{2})\/(\d{2})/
    var months = ["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
    
    var parts = myurl.match(re)
    
    var year = parseInt(parts[1]);
    var month = parseInt(parts[2],10);
    var day = parseInt(parts[3],10);
    
    alert( months[month] + " " + day + ", " + year );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 2012-06-07
      • 2020-09-21
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      相关资源
      最近更新 更多