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>正規表現、凄いですね。
実はこの正規表現をワンライナーの形にしてみたのはこれが初めてです。半分はネタのつもりだったのですが、実際に書いてみたら、そこそこ使えそうな気がしてきました。