我正在尝试使用正则表达式从时间戳中提取年份,但我不是很擅长,所以我的代码没有返回预期的内容。
这是字符串:' 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 ,,,,
我做错了什么? 提前致谢
答案 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)