【发布时间】:2016-06-15 16:01:24
【问题描述】:
尝试迭代一些短语,每当我找到一个单词时,我需要用一个链接替换它。
phrases = ["hello world", "worldwide"]
words_to_link = ["world", "world"]
我想得到:
"hello <a href='world'>world</a><br />worldwide"
我的代码是:
phrases.each do |ph|
words_to_link.each do |w|
ph.gsub!(w, "<a href='#{w}'>#{w}</a>")
end
end.join("<br />").html_safe
这个的输出是:
"hello <a href='<a href='world'>world</a>'><a href='world'>world</a></a><br /><a href='<a href='world'>world</a>'><a href='world'>world</a></a>wide"
在第一次运行时,它会找到所有出现的 world,但在第二次运行时,它再次进入生成的 <a href="#world">world</a> 和 gsubs。
另一个问题是正确的正则表达式只能按边界查找单词,我以为是/\b(word)\b,但这不起作用。
任何指针?
【问题讨论】:
-
在这个例子中,您似乎可以将
words_to_link数组更改为只有一个元素。目前它有两次相同的单词。 -
是的,这是一个简化的例子,但是数组可以有重复
-
如果数组有重复,这似乎行不通。
-
是否有另一种方法来处理这种多重替换 @maxpleaner ?
-
在rubular.com 上试用正则表达式。我认为发布的答案是一个好方法。不确定单词边界问题。
标签: ruby-on-rails ruby regex gsub