【问题标题】:regex how to replace twitter links正则表达式如何替换 twitter 链接
【发布时间】:2012-09-07 11:47:26
【问题描述】:

请帮我处理正则表达式。

我发现代码很平静:

    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)));
        }
      };
    }();

但它不能正常工作。

首先在我的页面中可能有&lt;b&gt;@username&lt;/b&gt;,因此正则表达式不起作用(我认为我需要将这些字符“”附加到“at 函数”。但是如何?)

在我页面的“hash”函数中,查询中可以有其他非 a-zA-Z 字符)。例如“такие символы”或“ñ”或其他。格式化的字符串看起来像#&lt;a href="twitter.com/?q=Catalu"&gt;Catalu&lt;/a&gt;ña for #Cataluña word

请帮助我。谢谢!

【问题讨论】:

    标签: javascript regex


    【解决方案1】:
    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;
    }
    

    【讨论】:

    • 这不适用于像processTweetLinks('@james This is a link test. http://www.google.co.uk http://www.yahoo.co.uk'); 这样的连续两个链接,除非您将贪婪标志添加到第一个正则表达式:var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&amp;@#\/%?=~_|!:,.;]*[-A-Z0-9+&amp;@#\/%=~_|])/gi;
    【解决方案2】:

    这是我的代码:

    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

    【讨论】:

      【解决方案3】:

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

      那么正则表达式只匹配字母、数字和下划线。

      也许您应该使匹配不那么严格,并匹配一系列不是空格的字符,例如\@(!\s){1,15}\s,尽管我不确定 Twitter 名称中是否允许使用这些 un​​icode 字符。许多文件只提到 [A-Za-z0-9]。这有改变吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-27
        • 2013-05-13
        • 1970-01-01
        相关资源
        最近更新 更多