【发布时间】:2015-10-30 12:29:25
【问题描述】:
我有一个 REST 服务,它提供带有文本和链接的字符串。字符串中可以是 url,也可以是已经用 HTML 链接标签格式化的链接。
我正在寻找一种在不更改任何现有链接标签的情况下将所有 URL 转换为 html 链接的方法。
我使用了这个函数,但它只完成了一半的工作,因为它会将 URL 转换为现有链接标签的 href 属性内
var text = "Test linktag: <a target='_blank' href='http://www.google.com'>Google</a> some other text" + "<br>" +
"Test url: http://www.google.com some other text";
function urlify(text) {
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
var text1 = text.replace(exp, "<a href='$1'>$1</a>");
var exp2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
return text1.replace(exp2, '$1<a target="_blank" href="http://$2">$2</a>');
}
var result = urlify(text)
// result will give:
// Test linktag: <a target='_blank' href='<a href='http://www.google.com'>http://www.google.com</a>'>Google</a> some other text<br>Test url: <a href='http://www.google.com'>http://www.google.com</a> some other text
【问题讨论】:
-
你可以为你迄今为止尝试过的东西制作小提琴
-
您必须让您的函数查找现有的
a标签,然后删除它们(最简单的方法,但会丢失target等已经存在的任何属性)或者不添加新标签。 -
@SunKnight0 失去目标属性不会成为问题,因为我的应用程序中的每个链接都有 target="_blank" 属性。
-
然后在添加新标签之前从文本中删除所有 和 实例
-
@SunKnight0 它增加了许多变量。我相信我能做的最好的事情就是尝试一些库。我发现最好的工作就像一个魅力:github.com/gregjacobs/Autolinker.js
标签: javascript jquery html