代码之家  ›  专栏  ›  技术社区  ›  vcuankit

正则表达式:从字符串中提取日期

  •  0
  • vcuankit  · 技术社区  · 16 年前

    希望这不会太困难,但我对正则表达式不是太熟练。我有一个包含两个日期的字符串,希望使用javascript将这两个日期提取到数组或其他东西中。

    以下是我的字符串:“我在2009年10月28日星期四到2009年11月7日星期六期间有空”

    我希望阵列是: arr[0]=“2009年10月28日,星期四” arr[1]=“2009年11月7日,星期六”

    这有可能吗?

    谢谢你的帮助!

    3 回复  |  直到 16 年前
        1
  •  2
  •   Crescent Fresh    16 年前

    对于这样的静态字符串,您不需要正则表达式。怎么样:

    var s = "I am available Thursday, October 28, 2009 through Saturday, November 7, 2009";
    var dates = s.split('available')[1].split('through');
    trim(dates[0]); // "Thursday, October 28, 2009"
    trim(dates[1]); // "Saturday, November 7, 2009"
    

    trim() 带前导+尾随空格:

    function trim(str) {
        return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
    }
    
        2
  •  0
  •   rjmunro    16 年前

    只有正则表达式,您才能真正使它适用于非常特定的日期格式。所以这将符合你的原话:

    var s="I am available Thursday, October 28, 2009 through Saturday, November 7, 2009";
    arr=s.match(/(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)[^\d]*\d*, \d*/g);
    alert(arr);
    

    但如果有人刚刚输入:“2009年10月28日”。

        3
  •  0
  •   Brienne Schroth    16 年前

    “(星期日星期一星期二等),(一月二月等)[1-3]?可能是[0-9],[0-9][0-9][0-9][0-9]?javascript的语法可能并不精确,但这应该能让人理解。它可能会出现误报(1月39日),但试图在regexp中解释复杂的日历规则是错误的。