John Gruberの改良されたリベラルで正確な正規表現パターンをJavaScriptの1つに統合しようとしていますが、WebKitのインスペクター(Google Chrome 5.0.375.125 for Mac)で「無効なグループ」の正規表現構文エラーが発生します。
Gruberの元の正規表現は次のとおりです。
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))
正規表現を使用したJavaScriptの行は次のとおりです(スラッシュをバックスラッシュでエスケープした場合)。
tweet_text = tweet_text.replace(/(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi, '<a href="$1">$1</a>');
そして、Google Chrome(V8?)エラーは次のとおりです。
Uncaught SyntaxError: Invalid regular expression: /(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/: Invalid group
また、Safariのエラーは次のとおりです。
SyntaxError: Invalid regular expression: unrecognized character after (?
彼は、それが最新のJavaScript正規表現インタープリターで機能するはずだと主張しています。これは、WebKitとV8で機能すると思います。JavaScriptの正規表現構文は(?:
(句読点のインデックスを作成しないことでGoogleを酷評します!)グループ化構文をサポートしていませんか?何かを逃れるのを逃しただけですか?