私はクロムやIEに
/^(.+)+Q$/.test("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
を実行し、それが完了するまでに約10秒かかります。 (Firefoxはほぼ瞬時にそれを評価することができます。)
なぜそんなに時間がかかるのでしょうか? (そして、なぜFirefoxがそれをすばやく行うことができるのでしょうか?)
(もちろん、私はこの特定の正規表現は実行しませんでしたが、URL正規表現http://daringfireball.net/2010/07/improved_regex_for_matching_urlsで同様の問題が発生しています例えば、これに煮詰める、すなわちブラウザがロックするようになります特定のURLがある)
:
var re = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i;
re.test("http://google.com/?q=(AAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
http://www.regular-expressions.info/catastrophic.html – georg
一つの理由は、それがバックトラックの多くをしている可能性があります。 Firefoxがなぜより速いのか、これは説明しません。たぶんいくつか追加の最適化があります。あなたが正規表現エンジンの内部の仕組みについての詳細を知りたい場合は、私は読むことをお勧めhttp://shop.oreilly.com/product/9780596528126.do –
@thg」ヒットの回答をお願いし –