Ruby - 尝试将字符串中的hashtags转换为链接

时间:2014-10-12 18:41:46

标签: ruby regex iteration hashtag

我正在尝试将字符串中的主题标签转换为链接。

e.g。我想要一个当前的字符串:“我是一个包含#hashtag的字符串”转换为:“我是一个包含#hashtag的字符串”

我目前的代码如下:

<% @messages.each do |message| %>
    <% string = message.content %>
    <% hashtaglinks = string.scan(/#(\d*)/).flatten %>
    <% hashtaglinks.each do |tag| %>
            <li><%= string = string.gsub(/##{tag}\b/, link_to("google", "##{tag}") %><li>
    <% end %>
<% end %> 

我一直在尝试(徒劳)几个小时才能让它工作,通过许多类似的stackoverflow线程阅读 - 但是挫败感已经让我变得更好,作为初学者rubyist,我真的很感激它如果有人可以请你帮帮忙!

我的'server.rb'中的代码如下:

get '/' do
    @messages = Message.all
    erb :index
end

post '/messages' do
    content = params["content"]
    hashtags = params["content"].scan(/#\w+/).flatten.map{|hashtag| 
Hashtag.first_or_create(:text => hashtag)}
    Message.create(:content => content, :hashtags => hashtags)
    redirect to('/')
end

get '/hashtags/:text' do
    hashtag = Hashtag.first(:text => params[:text])
    @messages = hashtag ? hashtag.messages : []
    erb :index
end

helpers do

def link_to(url,text=url,opts={})
  attributes = ""
  opts.each { |key,value| attributes << key.to_s << "=\"" << value << "\" "}
  "<a href=\"#{url}\" #{attributes}>#{text}</a>"
end

end

1 个答案:

答案 0 :(得分:1)

以下是帮助您入门的代码。这应该使用链接替换(就地)string中的主题标签:

<% string.gsub!(/#\w+/) do |tag| %>
  <% link_to("##{tag}", url_you_want_to_replace_hashtag_with) %>
<% end %>

您可能需要在字符串上使用html_safe以便以后显示它。

正则表达式不会考虑更复杂的情况,例如##tag0#tag1#tag2时的情况。 tag0tag2应该被视为主题标签吗?另外,如果您想将代码限制为字母数字和数字,则可能需要将\w更改为[a-zA-Z0-9]之类的内容。