Javascript正则表达式从字符串中提取年份

时间:2012-09-07 16:03:54

标签: javascript jquery regex timestamp

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

这是字符串:' 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 ,,,,

我做错了什么? 提前致谢

3 个答案:

答案 0 :(得分:7)

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

 alert(x.getUTCFullYear());

答案 1 :(得分: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"]

编辑:......但是James Kleeh’s answer就像是一个更好的选择。

答案 2 :(得分:0)

首先,它适用于RegexBuddy(它成功返回组#1)。

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