我想将javascript字符串中的所有URL转换为链接,该字符串中还包含以井号#开头的单词。
目前我创建了两个级联的正则表达式,一个基于URL创建HTML锚标记,另一个为hashtag(如Twitter中)创建锚标记。
我试图将www.sitename.com/index.php#someAnchor解析成正确的标记,但遇到了很多问题。
content = urlifyLinks(content);
content = urlifyHashtags(content);
这两个函数的定义如下:
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元素,这是否很丑陋?