テキスト内の URL をラップしてハイパーリンクに変換しようとしていますが、既にハイパーリンクでラップされている URL をラップしたくありません。
例えば:
<a href="http://twitter.com">Go To Twitter</a>
here is a url http://anotherurl.com
次のコード:
function replaceURLWithHTMLLinks(text) {
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp, "<a href='$1'>$1</a>");
}
次の出力が得られます。
<a href="<a href='http://twitter.com/twitter'>http://twitter.com/twitter</a>">@BIR</a>
<a href="http://anotherurl.com">http://anotherurl.com</a>
すでにハイパーリンクされている URL を除外するように正規表現を変更するにはどうすればよいですか?
ありがとう
答え:
新しい方法は次のとおりです。
function replaceURLWithHTMLLinks(text) {
var exp = /(?:^|[^"'])((ftp|http|https|file):\/\/[\S]+(\b|$))/gi
return text.replace(exp, " <a href='$1'>$1</a>");
}
上記のコードは必要に応じて機能します。コメントのリンクから正規表現を変更しました。これには完全な URL の後に来る完全な停止が含まれるバグが含まれていたためです。