Makeを利用したJavaScriptファイルの結合・圧縮 というエントリを目にしました。
Make に対抗して Rake を紹介するのもいいかなと思ったのですが (以前訳してみた Rake チュートリアルは、たまに見てくれている方もいらっしゃるようですし)、 後半の「圧縮」という方に目をつけて、JavaScript のコメントとインデントを削除する 正規表現を紹介してみます。
このようなスクリプトが
/* * hogehoge */ function C(){ var a = 1; /* * foo */ this.foo = function(){ // foobar var str = "/* comment */"; this.a = '"foobar"'; } } var c = new C(); // fugafuga c.foo();
こういう感じになります。
function C(){ var a = 1; this.foo = function(){ var str = "/* comment */"; this.a = '"foobar"'; } } var c = new C(); c.foo();
これは、次のようなワンライナーで可能です。
% ruby -e "print ARGF.read(nil).gsub(%r<([^\"'/\\s]+|\"[^\"\\\\]*(?:\\\\.[^\\\\]*)*\"[^\"'/\\s]*|'[^'\\\\]+(?:\\\\.[^'\\\\]*)*'[^\"'/\\s]*)|/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/|//[^\\n]*|^\\s+>){\$1}"
……これだけ見ても、さっぱり分からないですね。
この正規表現は、詳説正規表現第2版を参考にしました。 第6章で、C言語のコメントを削除する正規表現の書き方と、その最適化の方法が 順を追って解説されています。 正規表現について詳しく知りたいという人にはおすすめの本です。
トラックバックありがとうございます。<br>Railsは結構使っているのですが、Rakeは調べたことがありませんでした。便利そうなので、今度試してみます。<br>正規表現、凄いですね。
実はこの正規表現をワンライナーの形にしてみたのはこれが初めてです。半分はネタのつもりだったのですが、実際に書いてみたら、そこそこ使えそうな気がしてきました。