1. ホーム
  2. javascript

[解決済み] プレーンなURLをリンクに置き換えるには?

2022-03-21 22:49:30

質問

以下の関数を使って、指定されたテキスト内のURLとマッチングさせ、HTMLリンクに置き換えています。正規表現はうまくいっているのですが、現在、最初にマッチしたものだけを置き換えています。

すべてのURLを置換するにはどうすればよいですか?私は エグゼクティブ コマンドを実行する必要がありますが、その方法がよく分かりませんでした。

function replaceURLWithHTMLLinks(text) {
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i;
    return text.replace(exp,"<a href='$1'>$1</a>"); 
}

解決方法は?

まず、URLをパースするための独自の正規表現をロールバックすることは ひどい考え . この問題は、誰かが書いて、デバッグして、そして テスト済み によると、そのためのライブラリは RFC . URIは複雑 - をチェックします。 Node.jsでURLパースするためのコード というWikipediaのページがあります。 URIスキーム .

URLのパースに関しては、エッジケースが山ほどあります。 国際ドメイン名 , 実際の ( .museum ) vs. 存在しない ( .etc ) TLD、変な句読点など 括弧 URLの末尾の句読点、IPV6ホスト名など。

を調べてみました。 1トン ライブラリ そして、いくつかの欠点があるにもかかわらず、使用する価値のあるものがいくつかあります。

このタスクのために素早く失格させたライブラリ。

正規表現にこだわるのであれば、最も包括的なのは URL正規表現 from Component ただし、これを見ると、存在しない2文字のTLDを誤検出することがあります。