用链接替换锚点&截断值

时间:2012-06-13 20:42:33

标签: javascript jquery regex dom anchor

我有一个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的正则表达式的理解有点受限

2 个答案:

答案 0 :(得分: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>'
    });
}

DEMO:http://jsfiddle.net/84Le9/2/

答案 1 :(得分: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