css - Rails 4 : how to identify and format links, 主题标签和模型属性中的提及?

标签 css ruby-on-rails regex ruby-on-rails-4 hashtag

在我的 Rails 4 应用程序中,我有一个 Post模型,带有 :copy:short_copy作为自定义属性(字符串)。

这些属性包含社交媒体(Facebook、Twitter、Instagram、Pinterest 等)的副本。

我在 Posts#Show 中显示这些属性的内容查看。

目前,URL、#hashtags 和@mentions 的格式与文本的其余部分一样。

我想做的是以不同的方式格式化它们,例如另一种颜色或粗体。

我找到了 twitter-text gem ,它似乎提供了这样的功能,但我的问题是我不需要——也不希望——将这些 URL、#hashtags 和@mentions 变成真正的链接。

事实上,twitter-text gem 似乎默认将 URL、#hashtags 和 @mentions 转换为 Twitter::Autolink。 ,如 this Stack Overflow question 中所述.

这不是我想要的:我只想更新我的 URL、#hashtags 和@mentions 的样式。

我如何在 Ruby/Rails 中执行此操作?

——————

更新:

根据 Wes Foster 的回答,我在 post.rb 中实现了以下方法:

def highlight(string)
  string.gsub!(/\S*#(\[[^\]]+\]|\S+)/, '<span class="highlight">\1</span>')
end

然后,我定义了以下 CSS 类:

.highlight {
    color: #337ab7;
}

最后,我实现了 <%= highlight(post.copy) %>在所需的 View 中。

我现在收到以下错误:

ArgumentError
wrong number of arguments (1 for 2..3)
<td><%= highlight(post.copy) %></td>

我做错了什么?

——————

最佳答案

我确信可以改进以下每个正则表达式模式以匹配更多选项,但是,以下代码对我有用:

def highlight_url(str)
    str.gsub!(/(https?:\/\/[\S]+)/, '[\1]')
end

def highlight_hashtag(str)
    str.gsub!(/\S*#(\[[^\]]+\]|\S+)/, '[#\1]')
end

def highlight_mention(str)
    str.gsub!(/\B(\@[a-z0-9_-]+)/i, '[\1]')
end

# Initial string
str = "Myself and @doggirl bought a new car: http://carpictures.com #nomoremoney"

# Pass through each
highlight_mention(str)
highlight_hashtag(str)
highlight_url(str)

puts str   # > Myself and [@doggirl] bought a new car: [http://carpictures.com] [#nomoremoney]

在这个例子中,我用方括号 [] 包裹了匹配项。您应该使用 span 标签并设置样式。此外,为了简单起见,您可以将所有三个 gsub! 包装到一个方法中。

针对提问者的附加错误问题进行了更新

看起来错误是引用了另一个名为 highlight 的方法。尝试将方法的名称从 highlight 更改为 new_highlight 以查看是否可以解决新问题。

关于css - Rails 4 : how to identify and format links, 主题标签和模型属性中的提及?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33242512/

相关文章:

Python 正则表达式困惑

html - IE CSS Fieldset 边框向右延伸太远 : Why?

ruby-on-rails - 如何在不丢失数据的情况下启动已经配置的 Vagrant box

r - 在 r 中使用 grep 和非常大的正则表达式向量

mysql - Ruby on Rails - 任何性能诊断工具?

ruby-on-rails - 使用模型名称中的大写字母覆盖 Rails Controller 路由

python - 在字符串匹配后替换特定字符

css - GWT/UIBinder 如何找到 <ui :style> 的主 css 文件

php - 如果函数返回 0 到 6 之间的数字,则更改背景颜色

javascript - 切换 jquery offsetParent() 方法