Mauro74
Mauro74

Reputation: 4826

Javascript regex to extract year from string

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

Answers (3)

s4y
s4y

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

James Kleeh
James Kleeh

Reputation: 12228

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

 alert(x.getUTCFullYear());

Upvotes: 7

Poni
Poni

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

Related Questions