我想将 javascript 字符串中的所有 URL 转换为链接,在这个字符串中还有以 # 开头的单词。
到目前为止,我在级联中创建了两个正则表达式,一个基于 url 创建 html 锚标签,另一个创建主题标签的锚标签(如在 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 元素,这是一件丑陋的事情吗?