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"]

編集:…しかし、JamesKleehの答えははるかに優れた選択肢のようです。

于 2012-09-07T16:09:14.627 に答える
0

まず、RegexBuddyと連携します(グループ#1を正常に返します)。

あなたが試してみたいと思うかもしれない別の正規表現、それは私にはもっと単純に見えます:(.+?\d\d (\d+)それからグループ#1を取ります)

于 2012-09-07T16:11:56.203 に答える