このリンクの基本的な質問に対する回答を確認しました:プレーンURLをリンクに置き換える方法は?そして、 Christian Kochが提案したコードを使用することにしましたが、それは私がしなければならないことを部分的にしかカバーしていません。ここの誰かが私を助けてくれることを願っています。
Christian Kochが提供したコードは、1つの例外を除いてうまく機能します。すでにリンクが含まれているテキストとプレーンテキストだけがある場合、それらのリンクには二重の「a」タグが付けられるため、HTMLの問題が発生し、テキストがブラウザに正しく表示されません。
たとえば、コードはこれに対して正常に機能します。
www.yahoo.com is a website just like http://www.google.com
yahooとgoogleのテキストがリンクとして表示され、予想どおりに両方にリンクラッパーが表示されます。
<a href="http://www.yahoo.com">www.yahoo.com</a> is a website just like <a href="http://www.google.com">http://www.google.com</a>
次に、このテキストを取得します(基本的なテキストとすでに定義されているリンクが含まれています)。
www.yahoo.com is a website just like <a href="http://www.google.com">http://www.google.com</a>
提供されたコードを使用する場合、yahooリンクは正しいですが、googleリンクには二重タグが付いています。
<a href="http://www.yahoo.com">www.yahoo.com</a> is a website just like <a href="<a href="http://www.google.com">http://www.google.com</a>" target="_blank"><a href="http://www.google.com">http://www.google.com</a></a>
誰かがパターンを正しくするのを手伝ってくれませんか?テキストにすでにリンクが含まれている場合、パターンはそれを無視しますが、タグのない他のテキストを置き換えます。テキストがまだリンクタグに含まれていない場合にのみ、パターンに置換を実行させたいのです。
これが私が他の投稿から使用しているコードです:
doLinks: function(originalText)
{
// http://, https://, ftp://
var urlPattern = /\b(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|]/gim;
// www. sans http:// or https://
var pseudoUrlPattern = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
// Email addresses *** here I've changed the expression ***
var emailAddressPattern = /(([a-zA-Z0-9_\-\.]+)@[a-zA-Z_]+?(?:\.[a-zA-Z]{2,6}))+/gim;
return originalText
.replace(urlPattern, '<a target="_blank" href="$&">$&</a>')
.replace(pseudoUrlPattern, '$1<a target="_blank" href="http://$2">$2</a>')
.replace(emailAddressPattern, '<a target="_blank" href="mailto:$1">$1</a>');
}