请参阅下面代码中的第 8 行,并附上注释:
<script>
$(function(){
$.getJSON('http://twitter.com/status/user_timeline/TWITTER.json?count=1&callback=?',twitterJSON);
function twitterJSON(data){
var twitterOut = '<p>'+data[0].text+'</p><strong>- '+data[0].user.name+'</strong>';
var twitterOutAt = twitterOut.replace(/\B@([\w-]+)/gm,'<a href="http://twitter.com/$1">@$1</a>');
var twitterOutHash = twitterOutAt.replace(/\B#([\w-]+)/gm,'<a href="http://search.twitter.com/search?q=$1">#$1</a>');
var twitterOutDone = twitterOutHash.replace(/(href="|<a.*?>)?[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/g,'<a href="$1">$1</a>'); // not working :(
$('.twitter').html(twitterOutDone);
}
});
</script>
任何重构代码的帮助将不胜感激!
例如:必须有一种方法来链接.replace
,这样就不必一次又一次地分配一个新的var
。我试过 var twitterOut.replace().replace()...
但这似乎不起作用:(
最佳答案
这是我使用的工作函数:
jQuery.fn.urlize = function() {
if (this.length > 0) {
this.each(function(i, obj){
// making links active
var x = $(obj).html();
var list = x.match( /\b(http:\/\/|www\.|http:\/\/www\.)[^ <]{2,200}\b/g );
if (list) {
for ( i = 0; i < list.length; i++ ) {
var prot = list[i].indexOf('http://') === 0 || list[i].indexOf('https://') === 0 ? '' : 'http://';
x = x.replace( list[i], "<a target='_blank' href='" + prot + list[i] + "'>"+ list[i] + "</a>" );
}
}
$(obj).html(x);
});
}
};
在你的情况下:
$('.twitter').urlize();
关于javascript - 如何使用 jquery regex 将字符串中的链接替换为可点击的版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8353474/