0

編集可能なiframeで、この正規表現のおかげでプレーンURLをリンクに置き換えています。

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>

この問題は、html文字列を分析する代わりにDOMを反復処理することで解決できると思いますが、試す前に、誰かが何か考えを持っているかどうかをここで尋ねたいと思います。

ありがとう!

4

1 に答える 1

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/

于 2013-07-27T15:07:09.643 に答える