0

数据:

"Sun Sep 30 2012 12:37:24 GMT-0700 (Pacific Daylight Time)"

在正则表达式中,我试图只得到“2012 年 9 月 30 日”而不做文字/Sep\s\d\d\s2012/

我几乎想取出“Sun”和“12:37:24....”,以便只捕获“Sep 30 2012”。

我将如何在 JavaScript REGEX 中执行此操作?

更新:

我做了一个,但它不是那么优雅:\w{3}\s\d{1,2}\s2\d\d\d

是否有一个 REGEX 模式可以说,“取出前 3 个字母和它后面的一个空格……捕获日期格式……之后不要取任何东西。”

4

5 回答 5

1

对我来说,似乎日期和月份总是 3 个字符长,因此搜索的字符串始终具有相同的长度并且始终位于相同的位置。

"Sun Sep 30 2012 12:37:24 GMT-0700 (Pacific Daylight Time)".slice(4, 15)
于 2012-09-30T20:00:12.250 回答
1

不。我可以看到您几乎肯定会使用一些 JavaScript 日期到字符串的转换(甚至可能只是(new Date).toString()),这取决于语言环境。对于脚本的许多用户来说,情况会有所不同。

相反,日期应该已经采用特定格式。比如在 PHP 中你可以这样做date("Y-m-d H:i:s"),然后按原样使用或split(/[- :]/). 或者,如果您已经拥有 Date 对象,只需使用这些get*()函数。

如果我错了,并且无论语言环境如何,您的格式实际上每次都完全相同,那么我想这样的事情会做:/[A-Z][a-z]{2} \d{2} \d{4}/

于 2012-09-30T20:00:23.247 回答
1

您可以使用split,splicejoin

var date = "Sun Sep 30 2012 12:37:24 GMT-0700 (Pacific Daylight Time)" ;
var desiredResult = date.split(" ").splice(1, 3).join(" ");
于 2012-09-30T20:00:56.157 回答
0

你可以使用substring

var s = "Sun Sep 30 2012 12:37:24 GMT-0700 (Pacific Daylight Time)";
s = s.substring(4, 15); // "Sep 30 2012"

如果你真的坚持使用正则表达式,你可以使用:

s = s.match(/\w{3}\s(\w{3}\s\d{1,2}\s2\d{3})/)[1]; // "Sep 30 2012"

但老实说,日期并不是真的要用正则表达式解析,或者substring就此而言,而是用真正的Date 解析器解析。

于 2012-09-30T19:58:21.463 回答
0

回答问题“在JS中如何说三个字母和一个空格”:

> "abc ".match("[A-Za-z]{3} ")
["abc "]
> "ab3 ".match("[A-Za-z]{3} ")
null
于 2012-09-30T20:03:20.483 回答