0

假设我有一段文字:

The Northrop Grumman X-47B https://en.wikipedia.org/wiki/Northrop_Grumman_X-47B 
is a demonstration unmanned combat air vehicle (UCAV) designed for carrier-based 
operations.

我想替换文本中的超链接并将其变成真正的超链接。同时,我想将超链接的措辞缩短为固定的 20 个字符,以便用户阅读的文本更短,例如

  • 诺斯罗普·格鲁曼公司 X-47B https://en.wikipedia.org...是一款专为舰载作战设计的演示无人作战飞行器 (UCAV)。

因此文本中的链接代码可能如下所示:

<a href="https://en.wikipedia.org/wiki/Northrop_Grumman_X-47B">https://en.wikipedia.org...</a>

我环顾四周,发现了一些例子,但它们根本不起作用。我想要一个标准的 JavaScript 函数来完成它。也就是说,一个接收纯文本(不是 HTML)并可以转换文本的函数。不确定如何同时防御 XSS。

我怀疑它会涉及循环遍历文本的每个部分,然后是一些正则表达式来查找 URL,提取它,然后用 substr() 缩短 URL,然后以某种方式将其替换为文本。知道怎么做吗?

谢谢您的帮助。

4

3 回答 3

1

像这样的东西:

$('p').html(function(_,txt) {
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
    return txt.replace(exp, function(l) {
        return '<a href="'+l+'">'+l.substr(0,20)+'...</a>'
    }); 
});

小提琴

于 2013-09-20T12:14:17.683 回答
0

我编辑了批准的答案以返回您需要的内容。无论链接如何,这都会替换链接文本(即,它不是维基百科的链接)。

function replaceURLWithHTMLLinks(text) {
  var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
  return text.replace(exp, function ($1) {
    return '<a href="' + $1 + '">' + $1.slice(0, 20) + '...</a>';
  });
}

小提琴

于 2013-09-20T12:20:21.360 回答
0

使用这个脚本

<script>
function convertlink(text) {
    var urlRegex = /(https?:\/\/[^\s]+)/g;
    return text.replace(urlRegex, function(url) {
        return '<a href="' + url + '">' + geturl(url) + '</a>';
    })

}

function geturl(url){
    if(url.length > 20){
     return url.substr(0,20) + "...";
    } else { 
     return url;
    }
}

var str = "The Northrop Grumman X-47B https://en.wikipedia.org/wiki/Northrop_Grumman_X-47B is a demonstration unmanned combat air vehicle (UCAV) designed for carrier-based operations."

alert(convertlink(str));
</script>
于 2013-09-20T12:21:15.583 回答