我试图在Twitter推文字符串中使用HASHTAGS,URLS和用户名应该像使用正则表达式的链接一样。我正在尝试一些正则表达式,但我错了。请在下面找到我的代码。
$text = "Check out @Bersin tips for building a successful #talentmanagement approach http:\/\/t.co\/27rbzMUagz"
String.prototype.parseURL = function() {
return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&~\?\/.="]+/g, function(url) {
return url.link(url);
});
};
String.prototype.parseUsername = function() {
return this.replace(/[@]+[A-Za-z0-9-_]+/g, function(u) {
var username = u.replace("@","")
return u.link('http://twitter.com/'+username);
});
}
String.prototype.parseHashtag = function() {
return this.replace(/[#]+[A-Za-z0-9-_]+/g, function(t) {
var tag = t.replace("#","%23")
return t.link('http://search.twitter.com/search?q='+tag);
});
};
alert(text.parseURL().parseHashtag().parseUsername());
答案 0 :(得分:2)
你的正则表达式中的任何地方你都在字符类中使用连字符并且它是未转义的。请记住,在字符类中,连字符只能在第1位或最后位置时才能转义。
1:所以代替:
/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&~\?\/.="]+/g
使用此:
/[A-Za-z]+:\/\/[\w-]+\.[\w:%&~?\/.="-]+/g
2:而不是:
/[@]+[A-Za-z0-9-_]+/g
使用此:
/@+[\w-]+/g
3:而不是:
/[#]+[A-Za-z0-9-_]+/g
使用此:
/#+[\w-]+/g