JavaScriptでGruberの「改良された」URLマッチングRegexpパターンを使用しようとしたときに、「無効なグループ」エラーを修正するにはどうすればよいですか?
-
01-10-2019 - |
質問
私はジョン・グルーバーを統合しようとしています URLを一致させるための改善されたリベラルで正確な正規表現パターン 私のJavaScriptsの1つになりましたが、WebKitのインスペクター(Google Chrome 5.0.375.125のMacの)は、「無効なグループ」正規表現構文エラーを提供します。
GruberのオリジナルRegexpは次のとおりです。
(?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`!()\[\]{};:'".,<>?«»“”‘’]))
Regexpを備えた私のJavaScriptからのラインは次のとおりです(Forward SlashはBackSlash-Escapedをスラッシュします):
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
そして、サファリのエラーは次のとおりです。
SyntaxError: Invalid regular expression: unrecognized character after (?
彼は、それが現代のJavaScript Regexp通訳者で働くべきであると主張しています。 JavaScriptのregexp構文はサポートしていませんか (?:
(句読点をインデックス化しないためのGoogleをくそー!)構文のグループ化?何かを逃れるのが恋しいですか?
解決
ああ、それはでした モード修飾子 (つまり、 (?i)
)正規表現の始まりに!
私は経験しました 「JavaScriptの正規表現フレーバー」に関するRegulal-Expressions.infoのデータセール, 、具体的には、何のリストです いいえ サポートされていて、「モード修飾子」がありました。これは、正規表現の閉鎖スラッシュの後にすでに指定していました。それを引き裂いたすべてのものがよく見えます。
したがって、私のJavaScript Regexは次のとおりです。
/\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
所属していません StackOverflow