トップ «前の日記(2005-12-02) 最新 次の日記(2005-12-07)» 編集

活動日誌


2005-12-06

[正規表現] JavaScript のコメントとインデントを削除する正規表現

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言語のコメントを削除する正規表現の書き方と、その最適化の方法が 順を追って解説されています。 正規表現について詳しく知りたいという人にはおすすめの本です。

本日のツッコミ(全2件) [ツッコミを入れる]
_ llamerada (2005-12-07 00:07)

トラックバックありがとうございます。<br>Railsは結構使っているのですが、Rakeは調べたことがありませんでした。便利そうなので、今度試してみます。<br>正規表現、凄いですね。

_ yanagi (2005-12-07 21:47)

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


2005|02|03|04|05|06|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|03|04|05|06|10|
2008|04|10|
2009|10|
2010|05|08|
2012|01|02|03|
2014|01|
トップ «前の日記(2005-12-02) 最新 次の日記(2005-12-07)»