Operaだけ何故か極端に高速な正規表現パターン
とても単純な正規表現だけれど、照合するのに非常に時間のかかるパターンがあります。下記はその一例。
var s = "abcdefghijklmnopqrstuvwxyz".match(/a(.+)+c/);
照合することは一目瞭然です。しかし、+ は最長一致型の照合なので2重のバックトラックが発生して、上の文字列の場合、一番最後になって照合が確認されることになります。たぶん、直感的には入力文字列の長さに応じて指数オーダで時間がかかるのだと思います。
実際にブラウザ上で確認すると、ChromeとIEは数秒程度かかりました。Firefoxは「警告:応答のないスクリプト」のポップアップが表示されてしまいました。
ところが、Operaは一瞬です。Date関数で処理時間を測定してもゼロです。Safariも結構高速で、数ミリ秒程度です。
通常、正規表現の実行は、オートマトンを実行する中間コードにコンパイルされますが、OperaやSafariはその最適化がなされているのかな、と思います。上のパターンの場合、1000倍以上の違いがあります。ベンチマークをとってみるのも面白いかも。