JavaScript - 正規表現のリテラルとコンストラクタ



Regular Expressions - MDNには以下のように書いてあります。

正規表現リテラル

  • スクリプト評価時にコンパイル
  • よりよいパフォーマンスが得られる

RegExp コンストラクタ関数

  • 実行時にコンパイル
  • 動的にパターンを生成する場合


パターンが変わらない場合・繰り返し使う場合にはリテラルを使うことが望ましいようです。
ではどの程度パフォーマンスに差があるのでしょうか。実験してみました。

リテラル
var reg = /(\d{6})/g;
var str = "123123444456789789456";
var results = str.match(reg);
alert(results);

コンストラクタ
var reg = new RegExp("(\d{6})", "g");
var str = "123123444456789789456";
var results = str.match(reg);
alert(results);

上記のコードを1万回を1セットとして5セット実施(単位:ミリ秒。環境:WinXP IE8 HTA)
リテラル コンストラクタ
1セット目 2954 3079
2セット目 2953 3032
3セット目 2984 3062
4セット目 2969 3000
5セット目 2969 3063
平均 2965.8 3047.2

確かにリテラルのほうがほんのり速いようですが…。気にするほどの差は無いようです。