Reputation: 4826
I'm trying to extract the year from a timestamp using regex, but I'm not very good at it, so my code isn't returning what expected.
that's the string: 'Sun Jan 01 2012 00:00:00 GMT+0000 (GMT)'
I need to extract '2012' here's my code:
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));
});
The alert box returns this: 2012 , ,2012,
What am I doing wrong? Thanks in advance
Upvotes: 1
Views: 2516
Reputation: 51715
That regular expression uses capture groups. If you look at the return value of exec()
, you’ll notice it looks something like this:
[" 2012 ", " ", "2012", " "]
So, you might want to write extractNumbers()
something like this:
function extractNumbers(str) {
var m = /(^|\s)(\d{4})(\s|$)/.exec(str);
if (m) {
return m[2];
}
}
FWIW, you can use non-capturing groups to group parts of the regexp but only capture what you need. A regexp like this:
/(?:^|\s)(\d{4})(?:\s|$)/
Would return a match array like this:
[" 2012 ", "2012"]
EDIT: …but James Kleeh’s answer is like a much nicer option.
Upvotes: 3
Reputation: 12228
var x = new Date("Sun Jan 01 2012 00:00:00 GMT+0000 (GMT)");
alert(x.getUTCFullYear());
Upvotes: 7
Reputation: 11327
First, it works with RegexBuddy (it returns group #1 successfully).
Another regex you might wanna try, which looks simpler to me: .+?\d\d (\d+)
(then take group #1)
Upvotes: 0