Javascript regex如何替换twitter链接

Javascript regex如何替换twitter链接,javascript,regex,Javascript,Regex,请帮我学习正则表达式 我发现这是一种很好的代码和平: 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.

请帮我学习正则表达式

我发现这是一种很好的代码和平:

    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)));
        }
      };
    }();
var=function(){
返回{
“链接”:功能(t){
返回t.replace(/(^\s+)(https*\:\/\/\s+[^\.\s+])/g,函数(m,m1,link){
返回m1+'';
});
},
“at”:功能(t){
返回t.replace(/(^ |\s+)\@([a-zA-Z0-9}{1,15})/g,函数(m,m1,m2){
返回m1+'@';
});
},
“散列”:函数(t){
返回t.replace(/(^ |\s+)\#([a-zA-Z0-9|]+)/g,函数(m,m1,m2){
返回m
1 + '#';
});
},
“清洁”:功能(tweet){
返回this.hash(this.at(this.link(tweet));
}
};
}();
但它不能正常工作

首先,在我的页面中可能有
@username
,因此regex不起作用(我想我需要在“At函数”中添加“”这个字符。但是怎么做呢?)

在我的页面中的“hash”函数的第二个位置,在查询中可以有其他非a-zA-Z字符)。例如“或”或“或”其他。格式化后的字符串将类似于
#Cataluña
单词的
#ña


请帮帮我。谢谢大家!

正则表达式以
/(^ |\s+
开头,这意味着它仅在文档开头或前面有空格时匹配
@foo

然后正则表达式只匹配字母、数字和下划线

也许你应该降低匹配的严格程度,匹配一系列不是空格的字符,比如
\@(!\s){1,15}\s
,尽管我不确定Twitter名称中是否允许使用这些unicode字符。很多文件只提到[A-Za-z0-9]。这是否已更改?

函数处理TweetLinks(文本){
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;
}
var exp=/(\b(https?| ftp | file):\/\/[-A-Z0-9+&@#\/%?=~~|!:,.;]*[-A-Z0-9+&@#\/%=~|]/i; text=text.replace(exp,“”); exp=/(^|\s)#(\w+)/g; text=text.replace(exp,“$1”); exp=/(^ |\s)@(\w+)/g; text=text.replace(exp,“$1”); 返回文本; }
以下是我的代码:

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>';
        });
}
函数addTwitterLinks(文本){
返回文本。替换(/[\@\\\\\\\]]([a-zA-z0-9\]*)/g,
函数(m,m1){
var t='';
});
}

下面是它的一个演示:

这不适用于一行中的两个链接,比如
processTweetLinks('@james,这是一个链接测试)。http://www.google.co.uk http://www.yahoo.co.uk');除非您将贪婪标志添加到第一个正则表达式:
var exp=/(\b(https?| ftp |文件):\/\/[-A-Z0-9+&@#\/%?=~|!:,.;]*[-A-Z0-9+&@#\/%=~|]/gi