【问题标题】:Regular expression to match google calendar event feed dates匹配谷歌日历事件提要日期的正则表达式
【发布时间】:2014-02-04 12:54:42
【问题描述】:

我一直试图在 JavaScript 中匹配来自谷歌日历 xml 提要的各种日期,但我失败了。

目前我有这个正则表达式:

\s(.*)\s

以下是一些字符串示例(每个代码块都是一个字符串),我需要在其中获取匹配项(注意斜线和换行符):

字符串 1:

When: Thu Jan 9, 2014 1:50pm to 2:45pm 
GMT<br />

<br />Where: Hall A
&lt;br /&gt;Event Status: confirmed</content>

字符串 2:

When: Mon Jan 4, 2014&lt;br /&gt;


&lt;br /&gt;Event Status: confirmed</content>

字符串 3:

When: Mon Oct 27, 2013 to Fri Nov 1, 2013 
&lt;br /&gt;


&lt;br /&gt;Event Status: confirmed</content>

字符串 4:

When: Tue Oct 15, 2013 3:30pm to 7:30pm 
BST&lt;br /&gt;


&lt;br /&gt;Event Status: confirmed
&lt;br /&gt;Event Description: Please complete a booking.&amp;#39;s teacher.</content>

字符串 5:

When: Mon Apr 21, 2014 to Fri Apr 25, 2014 
&lt;br /&gt;


&lt;br /&gt;Event Status: confirmed</content>

所以我只想匹配格式为“Day Mon dd,year”或“Day Mon dd,year time”的日期。我不想要那之后的部分。我不需要“to”部分。

所以如果一个带时间的日期存在,它应该匹配,如果时间不存在,那么它应该只匹配日期。

我对正则表达式非常陌生,并不真正知道如何去做。我打算买一本关于它的书好好学习,但我必须尽快解决这个问题。

如果有人能帮助我,我将非常感激。

【问题讨论】:

  • 如果他们向您发送 XML...请使用 XML 解析器而不是 RegEx,如果您想指定后端语言,我可以进一步提供帮助,或者您可以使用 JavaScript XML 解析 stackoverflow.com/questions/4200913/xml-to-javascript-object
  • 感谢您的评论。我只是尝试使用解析器,现在我得到了一个 JSON 对象。我试图打印出 object.feed.entry.summary 值,我得到了这个:时间:2014 年 1 月 9 日星期四 13:45 到 14:45 格林威治标准时间

    地点:艺术室
    活动状态:已确认 如您所见,它仍然不仅仅是一个日期。也许我只是不知道如何从对象中获取日期值。问题是我试图不在这里公开发布实际的提要。可能会让您难以看到实际 xml 的外观。
  • 在没有实际提要或演示提要的情况下更正我无法帮助您解析对象。但是,由于它是一个 JS 对象,只需在控制台中使用您的对象上格式化的 . 即可查看其中的内容。 Chrome > 开发者工具 > 控制台 > object 它会告诉你一切

标签: javascript regex match


【解决方案1】:

由于您是 RegExp 的新手,让我告诉您,有两种使用正则表达式模式的方法。

  1. 使用new RegExp('pattern-here')

  2. 使用javascript语法/pattern-here/flags

    第二个很简单:)

答案是

var regex = /(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s([0-9][0-9]|[0-9]),\s\d{4}\s([0-9][0-2]|[0-9]):([0-6][0-9]|[0-6]{2})(pm|am)|(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s([0-9][0-9]|[0-9]),\s\d{4}/g

这可以满足您的要求。

来自 abc123 的答案与时间不匹配,而且它匹配非法日期,例如

Hel Som 99, 9999

但我的没有。

使用它:

var matchDateRegex= /(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s([0-9][0-9]|[0-9]),\s\d{4}\s([0-9][0-2]|[0-9]):([0-6][0-9]|[0-6]{2})(pm|am)|(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s([0-9][0-9]|[0-9]),\s\d{4}/gm;

var s="some string with date Mon Jan 22, 2013 some thing Mon Jan 22, 2013 1:50pm";
var dates= s.match(matchDateRegex);

这将返回存储在dates 变量中的匹配日期数组。

现在您可以通过索引访问日期。

注意:如果您只想使用没有 javascript 语法的模式,请先删除
字符和最后三个字符('/' 和 '/gm'),但是你需要这样做

var regex=new RegExp('(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s([0-9][0-9]|[0-9]),\s\d{4}\s([0-9][0-2]|[0-9]):([0-6][0-9]|[0-6]{2})(pm|am)|(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s([0-9][0-9]|[0-9]),\s\d{4}','gm');

如果有帮助,请将其标记为 answer(我相信它会的)

【讨论】:

  • @alwaysStuck,这里有一个提示。使用新的 XMLSerializer().serializeToString() 方法,您可以将其转换为字符串,然后使用我的正则表达式来执行您想要的操作。我不评论你的帖子的原因是我没有足够的声誉:)
  • 我认为说“它匹配像Hel Som 99, 9999 这样的非法日期但我的不匹配”有点牵强。你的匹配 Thu Feb 31, 2014 这是一个非法日期。
【解决方案2】:

快速回答:

Regex:

When: ([\w]{3}) ([\w]{3}) ([\d]{1,2}), ([\d]{4})

Debuggex Demo

正则表达式解释

/When: ([\w]{3}) ([\w]{3}) ([\d]{1,2}), ([\d]{4})/
    When:  matches the characters When:  literally (case sensitive)
    1st Capturing group ([\w]{3})
        [\w]{3} match a single character present in the list below
            Quantifier: Exactly 3 times
            \w match any word character [a-zA-Z0-9_]
    matches the character   literally
    2nd Capturing group ([\w]{3})
        [\w]{3} match a single character present in the list below
            Quantifier: Exactly 3 times
            \w match any word character [a-zA-Z0-9_]
    matches the character   literally
    3rd Capturing group ([\d]{1,2})
        [\d]{1,2} match a single character present in the list below
            Quantifier: Between 1 and 2 times, as many times as possible, giving back as needed [greedy]
            \d match a digit [0-9]
    ,  matches the characters ,  literally
    4th Capturing group ([\d]{4})
        [\d]{4} match a single character present in the list below
            Quantifier: Exactly 4 times
            \d match a digit [0-9]

注意:如果他们向您发送 XML...请使用 XML 解析器而不是 RegEx,如果您想指定后端语言,我可以进一步提供帮助,或者您可以使用JavaScript XML解析XML to JavaScript Object

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多