如何匹配字符串中的日期

How to match date in string

本文关键字:日期 字符串 何匹配      更新时间:2023-09-26

>我试图从文本块中梳理出一个日期。据我所知,日期看起来总是类似于Mar 5, 2015(三个字母的月份,没有前导零的日,四位数的年份)。

但是,文本块的可变性更大一些。在大多数情况下,它通常看起来像这样:

我们理解有时您的旅行计划会发生变化。我们不收取更改或取消费用。但是,此酒店(酒店名称)对其客户施加以下罚款,我们需要转嫁: 2015 年 3 月 10 日东部时间上午 11:59((GMT-05:00)(美国和加拿大))之后取消或更改将收取 1 晚房费和税费罚款。酒店对未入住或提早退房不予退款。

这是我的尝试(val是包含字符串的变量):

var valDate = val.match("'''''')'''''') on (.*)are");返回价值[1];

如您所见,我选择了两个))在时区的末尾(我相信它将永远存在,无论美国东部标准时间/太平洋标准时间/等如何)和紧随日期之后的"是"。

这工作得很好。直到我的一家酒店通过了以下:

我们理解有时您的旅行计划会发生变化。我们不收取更改或取消费用。但是,此酒店(酒店名称)对其客户施加以下罚款,我们需要转嫁:在 2015 年 3 月 15 日东部时间下午 6:00((GMT-05:00)(美国和加拿大))之前取消或更改将收取 1 晚客房和税费罚款。在2015年3月15日下午6:00((GMT-05:00)东部时间(美国和加拿大))之后取消或更改将收取1晚房费和税费罚款。酒店对未入住或提早退房不予退款。

我的代码返回:

Mar 15, 2015 are subject to a 1 Night Room & Tax penalty. Cancellations or changes made after 6:00 PM ((GMT-05:00) Eastern Time (US & Canada)) on Mar 15, 2015

这是不太理想的地方。我想我明白为什么会发生这种情况,但请尝试尽管我可能不会修复它。此外,我的原始match诚然是笨拙的(因此这个问题)。我猜可能有更好的方法来梳理日期......我只是不知道怎么做。

有人可以帮助我吗?我将永远感激不尽!

可以匹配您给出的描述的模式是:

(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)'s+([0-9]|[1-2][0-9]|3[0-1]),'s+'d{4}

正则表达式 101 演示

虽然我相信如果你想捕捉日期,你最好找一个图书馆来做到这一点。这样的库可能不太容易出错,将具有不同的日期模式,并且可能更容易自定义。

您可以捕获组,如以下答案所示:

var r = /(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)'s+([0-9]|[1-2][0-9]|3[0-1]),'s+'d{4}/g;
var t = "We understand that sometimes your travel plans change. We do not charge a change or cancel fee. However, this property (Hotel Name) imposes the following penalty to its customers that we are required to pass on: Cancellations or changes made after 11:59 AM ((GMT-05:00) Eastern Time (US & Canada)) on Mar 10, 2015 are subject to a 1 Night Room & Tax penalty. The property makes no refunds for no shows or early checkouts.";
m = r.exec(t);
while (m != null) {
    //do something with m[0]
    alert(m[0]);//example
    m = r.exec(t);
}

JSFiddle.