我正在Ruby On Rails中创建一个Twitter克隆,我如何编码它以便'推文'中的'@ ...'变成链接?

时间:2010-01-09 19:11:48

标签: ruby-on-rails ruby

我有点像Rails的新手,所以请耐心等待,除了这一部分之外,我已经找到了大部分应用程序。

7 个答案:

答案 0 :(得分:5)

def linkup_mentions_and_hashtags(text)    
  text.gsub!(/@([\w]+)(\W)?/, '<a href="http://twitter.com/\1">@\1</a>\2')
  text.gsub!(/#([\w]+)(\W)?/, '<a href="http://twitter.com/search?q=%23\1">#\1</a>\2')
  text
end

我在这里找到了这个例子:http://github.com/jnunemaker/twitter-app

辅助方法的链接:http://github.com/jnunemaker/twitter-app/blob/master/app/helpers/statuses_helper.rb

答案 1 :(得分:0)

也许您可以使用正则表达式查找“​​@ ...”然后用相应的链接替换匹配项?

答案 2 :(得分:0)

您可以使用正则表达式搜索@sometext {whitespace_or_endofstring}

答案 3 :(得分:0)

你可以使用正则表达式,我不知道ruby,但代码应该与我的例子完全一样:

Regex.Replace("this is an example @AlbertEin", 
                    "(?<type>[@#])(?<nick>\\w{1,}[^ ])", 
                    "<a href=\"http://twitter.com/${nick}\">${type}${nick}</a>");

此示例将返回

this is an example <a href="http://twitter.com/AlbertEin>@AlbertEin</a>

如果在.NET上运行

正则表达式(?<type>[@#])(?<nick>\\w{1,}[^ ])表示捕获并命名为TYPE,以@或#开头的文本,然后捕获并命名为NAME后面包含至少一个文本字符的文本,直到找到空格为止

答案 4 :(得分:0)

也许您可以使用正则表达式来解析以@开头的单词,然后使用正确的链接更新该位置的字符串。

这个正则表达式会为您提供以@符号开头的单词,但您可能需要调整它:

\@[\S]+\

答案 5 :(得分:0)

您可以使用正则表达式搜索@username,然后将其转换为相应的链接。

我在PHP中使用以下代码:

$ret = preg_replace("#(^|[\n ])@([^ \"\t\n\r<]*)#ise", 
                    "'\\1<a href=\"http://www.twitter.com/\\2\" >@\\2</a>'", 
                    $ret);

答案 6 :(得分:0)

我也一直在努力,我不确定它是100%完美,但它似乎有用:

  def auto_link_twitter(txt, options = {:target => "_blank"})
    txt.scan(/(^|\W|\s+)(#|@)(\w{1,25})/).each do |match|
      if match[1] == "#"
        txt.gsub!(/##{match.last}/, link_to("##{match.last}", "http://twitter.com/search/?q=##{match.last}", options))
        elsif match[1] == "@"
          txt.gsub!(/@#{match.last}/, link_to("@#{match.last}", "http://twitter.com/#{match.last}", options))
          end
    end
    txt
  end

我将它与一些谷歌搜索拼凑在一起,并在api文档中阅读String.scan。