0

我正在尝试使用正则表达式从时间戳中提取年份,但我不是很擅长,所以我的代码没有返回预期的内容。

那是字符串:' Sun Jan 01 2012 00:00:00 GMT+0000 (GMT) '

我需要提取“2012”这是我的代码:

var scrollDate = tl.getBand(0).getCenterVisibleDate(); // my timestamp

// regex function
function extractNumbers(str) {
     var m = /(^|\s)(\d{4})(\s|$)/.exec(str);
     return m;
}

// click event
$('.n-left').click(function(){
     alert(extractNumbers(scrollDate));
});

警报框返回:2012 , ,2012,

我究竟做错了什么?提前致谢

4

3 回答 3

7
var x = new Date("Sun Jan 01 2012 00:00:00 GMT+0000 (GMT)");

 alert(x.getUTCFullYear());
于 2012-09-07T16:12:27.140 回答
2

该正则表达式使用捕获组。如果您查看 的返回值exec(),您会发现它看起来像这样:

[" 2012 ", " ", "2012", " "]

所以,你可能想写这样的extractNumbers()东西:

function extractNumbers(str) {
     var m = /(^|\s)(\d{4})(\s|$)/.exec(str);
    if (m) {
        return m[2];
    }
}

FWIW,您可以使用非捕获组对正则表达式的部分进行分组,但只捕获您需要的内容。像这样的正则表达式:

/(?:^|\s)(\d{4})(?:\s|$)/

将返回一个匹配数组,如下所示:

[" 2012 ", "2012"]

编辑:……但詹姆斯克利的回答就像一个更好的选择。

于 2012-09-07T16:09:14.627 回答
0

首先,它与 RegexBuddy 一起工作(它成功返回组 #1)。

您可能想尝试的另一个正则表达式,对我来说看起来更简单:(.+?\d\d (\d+)然后选择第 1 组)

于 2012-09-07T16:11:56.203 回答