JavaScriptでGruberの「改良された」URLマッチングRegexpパターンを使用しようとしたときに、「無効なグループ」エラーを修正するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3559113

  •  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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top