上記の正規表現を試してみましたがうまくいかなかったので、自作しました。磁石識別子がBase32であることを示すウィキペディアの磁石 URI スキームを調べました。つまり、次のことを意味します。
Base32 は、A ~ Z の 26 文字と 2 ~ 7 の 6 桁の数字を使用した base-32 転送エンコーディングです。[私の理解では、これらの数字と文字はランダムに補間される可能性があります] .
その結果、正規表現で次のものを探しています。
- magnet という単語の後にセミコロン、疑問符、および「xt=urn:」文字列が続く
- 次のセミコロンまでの任意の数の文字列/数字 (質問の正規表現はこれに失敗します)
- 上記の調査から、補間された文字と数字の 32 文字 (base32)
開始/
と/
終了を示す正規表現であるため、開始と終了が存在する必要があり、i
末尾の ( /i
) は大文字と小文字を区別しない正規表現を示します。を行わなかった場合/i
、 を確認する必要があり[a-zA-Z0-9]
ます。
実際に機能する最終的な正規表現は次のとおりです。
/magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i
これを自分で試すことができます:
var torrent = "magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C";
if (torrent.match(/magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i) !== null)
{
console.log("It's valid, bloody fantastic!");
}
必須の JSFiddle。