请帮我处理正则表达式。
我发现了这种良好的代码平静:
var ify = function() {
return {
"link": function(t) {
return t.replace(/(^|s+)(https*://S+[^.s+])/g, function(m, m1, link) {
return m1 + '<a href=' + link + '>' + ((link.length > 25) ? link.substr(0, 24) + '...' : link) + '</a>';
});
},
"at": function(t) {
return t.replace(/(^|s+)@([a-zA-Z0-9_]{1,15})/g, function(m, m1, m2) {
return m1 + '@<a href="http://twitter.com/' + m2 + '">' + m2 + '</a>';
});
},
"hash": function(t) {
return t.replace(/(^|s+)#([a-zA-Z0-9_]+)/g, function(m, m1, m2) {
return m
1 + '#<a href="http://search.twitter.com/search?q=%23' + m2 + '">' + m2 + '</a>';
});
},
"clean": function(tweet) {
return this.hash(this.at(this.link(tweet)));
}
};
}();
但它不能正常工作。
起初,在我的页面中可能有<b>@username</b>
,因此regex不起作用(我想我需要将这些字符"<"one_answers">"附加到"At函数"中。但如何?(
在我的页面中的"hash"函数的第二个位置,在查询中可以有其他非a-zA-Z字符(。例如"илы"或"ñ"或其他。对于#Cataluña
字,格式化后的字符串将类似于#<a href="twitter.com/?q=Catalu">Catalu</a>ña
请帮帮我。谢谢!
function processTweetLinks(text) {
var exp = /(b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|])/i;
text = text.replace(exp, "<a href='$1' target='_blank'>$1</a>");
exp = /(^|s)#(w+)/g;
text = text.replace(exp, "$1<a href='http://search.twitter.com/search?q=%23$2' target='_blank'>#$2</a>");
exp = /(^|s)@(w+)/g;
text = text.replace(exp, "$1<a href='http://www.twitter.com/$2' target='_blank'>@$2</a>");
return text;
}
下面是我的代码:
function addTwitterLinks(text) {
return text.replace(/[@#]([a-zA-z0-9_]*)/g,
function(m,m1) {
var t = '<a href="http://twitter.com/';
if(m.charAt(0) == '#')
t += 'hashtag/';
return t + encodeURI(m1) + '" target="_blank">' + m + '</a>';
});
}
下面是它的实际演示:http://siliconsparrow.com/javascripttwittertest.html
正则表达式以/(^|s+)
开头,这意味着只有当它位于文档开头或前面有空格时,它才与@foo
匹配。
然后正则表达式只匹配字母、数字和下划线。
也许你应该降低匹配的严格性,并匹配一系列不是空格的字符,比如@(!s){1,15}s
,尽管我不确定Twitter名称中是否允许使用这些unicode字符。很多文件只提到[A-Za-z0-9]。这个改变了吗?