用链接替换网址但添加困难

时间:2012-09-12 00:12:27

标签: javascript jquery url hyperlink

在可编辑的iframe中,由于此正则表达式,我正在使用链接替换普通网址:

function linkify(text) {
    var regex = /(http|https|ftp)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?\/?([a-zA-Z0-9\-\._\?\,\'\/\\\+&%\$#\=~])*/g;
    return text.replace(regex,"<a href='$&'>$&</a>");
}

var content = linkify($('.div').html());

当我尝试'链接'包含链接的字符串时,我的问题出现了,它创建了一个像这样的怪物:

<a href="&lt;a href='http://google.com'&gt;http://google.com&lt;/a&gt;"></a><a href="http://google.com">http://google.com</a>

我认为如果我遍历DOM而不是分析html字符串就可以解决这个问题,但在尝试之前我想问一下是否有人有任何想法。

谢谢!

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,并通过首先剥离html标签来解决它:

function strip_tags(str, allow) {
allow = (((allow || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('');

var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi;
var commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return str.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
return allow.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
}

然后运行urlify函数:

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

请看我的小提琴试试:http://jsfiddle.net/gerbenzomp/UJMeR/3/