※ ChatGPTを利用し、要約された質問です(原文:greesemonkeyスクリプトのime.nu relinkerでの正規表現について)
正規表現の部分を抜粋しました。
greesemonkeyスクリプトのime.nu relinkerでの正規表現について
var re_imenu = /^(https?):\/\/(?:[^\/]+?\.)*?(?:ime\.nu|ime\.st)\/(.+)$/i;
~略~
anchor.href = anchor.href.replace(re_imenu, "$1://$2");
正規表現の部分を抜粋しました。
↑でしていることは、
http://ime.nu/www.exeample.com(またはime.st) から
http://www.exeample.com
の形に変換することです。
自分の分かる範囲で書きます。
/^(https?):\/\/(?:[^\/]+?\.)*?(?:ime\.nu|ime\.st)\/(.+)$/i;
・まず、全体の//iは、大文字、小文字を無視するもの。
・^(https?)は、行の先頭からhttpまたはhttpsとなっているもの。
・:\/\/は、リテラルのエスケープ。
・(?:ime\.nu|ime\.st)は、JavaScriptでは、(?:で始まるグループ化は、キャッシュに残さない(つまり、後ほど、$2)などで参照できないようにする)で、ime.nuかime.stを含む文字列部分。
・\/(.+)$は、リテラル文字/のエスケープが入って、何かの文字(.)が行末($)までマッチするまでをグループ化している。
と理解しましたが、
(?:[^\/]+?\.)*?
の部分が分かりません。
「(?:」なので、キャッシュに残さずグループ化、そして[~\/]なので、/を含まない文字列の最長マッチ(+?)、*?はなんでしょうか?
そもそも、例のように、http://ime.nu/となっているのならば、この部分入らないのではないかと思うのですが。。
分からない部分の解説と、例文のようにime.nu/を抜くだけの場合には必要なのか必要でないのか、どなたかお詳しい方ご回答お願いいたします。
お礼
最長マッチではなく最短マッチでしたか、すみません。 サブドメインを含めてマッチさせようとしていたのですね。 といっても、いまのところサブドメイン付きのime.nuは見た事が無いのですが。 納得の行くご回答ありがとうございました。