0

我有一个 javascript 函数,用于检测和替换带有锚 (html) 的链接。然而,问题是有些人粘贴了大量的链接,导致页面元素过低,这会破坏页面(通常)。

有谁知道将以下两个功能组合成一个提供锚标记的简单方法,其中包含链接的截断版本?

IE 转换

http://Superlonglink

进入

<a href="http://Superlonglink">http://Super...</a>

使用以下功能的组合:

用锚点替换链接的功能:

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

截断字符串的函数:

String.prototype.trunc = function(n){
      return this.substr(0,n-1)+(this.length>n?'':'');
};

我已经玩了一段时间了,但是我发现我对 javascript 正则表达式的理解有点有限

4

2 回答 2

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

演示:http: //jsfiddle.net/84Le9/2/

于 2012-06-13T20:49:54.420 回答
1

在替换中使用一个函数,以便您可以操作它。

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



replaceURLWithHTMLLinks("http://www.example.com/IAMAVERYLONGLINKWITHMORESTUFF");

jsfiddle

于 2012-06-13T20:50:50.643 回答