正規表現で丸括弧「キャプチャする括弧」を使って日付書式を整形する

ラベル:

正規表現はBlogger:ページビュー設定(7)どのブラウザでも同じ方法で設定するページを作るでだいたい身についたと思ったのですが正規表現はもっと奥深いものでした。「キャプチャする括弧」という機能について学習します。

丸括弧で囲った条件にマッチした部分を配列で返す


(x) 'x' にマッチし、マッチした内容を記憶します。これはキャプチャする括弧と呼びます。
例えば /(foo)/ mは "foo bar." の 'foo' にマッチし、これを記憶します。マッチした部分文字列は、結果として生成される配列の要素 [1], ..., [n] から呼び出すことができます。
正規表現 - JavaScript | MDN
この機能を使ってフィードから得られる更新日時形式「2013-08-29T22:07:35.965+09:00」を整形します。

Blogger:レイアウト編集(9)各投稿の更新日時の表示をする(成功編)では.replase()を使って以下のようにして整形しました。
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<div id="nitiji"></div>
<script>
    function date_shoshiki2(feed_date){
        return feed_date.slice(0,17).replace("-","年").replace("-","月").replace("T","日").replace(":","時").replace(":","分");
    }
      $.getJSON("http://"+location.hostname+"/atom.xml?path="+location.pathname+"&alt=json-in-script&callback=?",
        function(json){
          var kokaibi =date_shoshiki2(json.feed.entry[0].published.$t);
          var koshinbi=date_shoshiki2(json.feed.entry[0].updated.$t);
          $("#nitiji").html(kokaibi+"公開"+"<br>"+koshinbi+"更新"+"<br>");
      });
</script>
5行目で「2013-08-29T22:07:35.965+09:00」の数字の間にある区切り文字を.replace()で順番に置換して「2013年09月26日15時39分」を得ています。

この5行目を正規表現を使って以下のように書き換えても同じ結果が得られます。
var date=feed_date.match(/\d+/g) ;
return date[0]+"年"+date[1]+"月"+date[2]+"日"+date[3]+"時"+date[4]+"分";
、、、あらら、丸括弧を使わなくても最後にgをつければ合致するものが前から順番に配列に入りました。

これでは例にならないので「2013-08-29T22:07:35.965+09:00」から「2013-08-29」と「22:07:35」、「+09:00」を取り出すことにします。
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<div id="nitiji"></div>
<script>
  function date_shoshiki2(feed_date){
    var date=feed_date.match(/(\d{4}-\d?\d-\d?\d).(\d?\d:\d?\d:\d?\d).+([\+\-]\d?\d:\d?\d)/) ;
    return "date[0]="+date[0]+"<br>"+"date[1]="+date[1]+" date[2]="+date[2]+" date[3]="+date[3];
  }
  $.getJSON("http://"+location.hostname+"/atom.xml?path="+location.pathname+"&alt=json-in-script&callback=?",
    function(json){
      var kokaibi =date_shoshiki2(json.feed.entry[0].published.$t);
      $("#nitiji").html(kokaibi+"<br>");
    }
  );
</script>
5行目が正規表現の部分です。

(\d{4}-\d?\d-\d?\d)で「年-月-日」、(\d?\d:\d?\d:\d?\d)で「時:分:秒」、([\+\-]\d?\d:\d?\d)で「時差」をキャプチャしています。

最初の例とは異なり、配列の0番目には/と/で挟んだ合致するものが全て入ることに注意が必要です。

1番目以降に順番に()に合致するものが入ります。


参考にしたサイト


正規表現 - JavaScript | MDN
正規表現における特殊文字について詳しい一覧が載っています。

正規表現(RegExp)
正規表現の文法が一覧になっていてわかりやすいです。
PR

0 件のコメント:

コメントを投稿