javascript文字列のすべてのURLをリンクに変換したいのですが、この文字列にはハッシュタグ#で始まる単語もあります。
今のところ、カスケードで2つの正規表現を作成しました。1つはURLに基づいてhtmlアンカータグを作成し、もう1つはハッシュタグのアンカータグを作成します(Twitterのように)。
www.sitename.com/index.php#someAnchorを正しいマークアップに解析しようとすると多くの問題が発生します。
content = urlifyLinks(content);
content = urlifyHashtags(content);
ここで、2つの機能は次のとおりです。
function urlifyHashtags(text) {
var hashtagRegex = /^#([a-zA-Z0-9]+)/g;
var tempText = text.replace(hashtagRegex, '<a href="index.php?keywords=$1">#$1</a>');
var hashtagRegex2 = /([^&])#([a-zA-Z0-9]+)/g;
tempText = tempText.replace(hashtagRegex2, '$1<a href="index.php?keywords=$2">#$2</a>');
return tempText;
}
function urlifyLinks(inputText) {
var replaceText, replacePattern1, replacePattern2, replacePattern3;
replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
replacedText = inputText.replace(replacePattern1, '<a href="$1" target="_blank">$1</a>');
replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
replacedText = replacedText.replace(replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>');
replacePattern3 = /(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim;
replacedText = replacedText.replace(replacePattern3, '<a href="mailto:$1">$1</a>');
return replacedText;
}
urlifyLinksの出力を解析し、最初のレベルのテキスト要素であるすべてのdom要素に正規表現を適用することを検討していますが、それは醜いことですか?