我有以下内容:
str = "Hello world. Today is Wednesday"
matchedTerms
matchedTerms包含如下数据:
> "world"
> "word, is"
我想做的是像这样更新str:
"Hello <b>world</b>. Today <b>is</b> Wednesday"
在ruby / rails中,给定matchedTerms更新字符串的正确方法是什么?
由于
答案 0 :(得分:2)
String#gsub方法需要一个块,这可以使这非常简单(并且应该比编写迭代器/循环更有效)。
以下是我如何做到这一点:
matched_terms = ["world", "is"]
pattern = Regexp.new(matched_terms.join("|"), Regexp::IGNORECASE)
str = "Hello world. Today is Wednesday"
result = str.gsub(pattern) { |match| "<b>#{match}</b>" }
# => "Hello <b>world</b>. Today <b>is</b> Wednesday"
我无法理解为什么在给出示例输出的情况下,为"word, is"
作为匹配条件之一...所以我只是简化为"is"
。如果您真的希望将"word, is"
视为另外两个匹配项 - "word"
和"is"
- 那么我会提前清理它,如下所示:
matched_terms.map! { |mt| mt.split(", ") }.flatten!
答案 1 :(得分:1)
我不知道这是否适用于您想要的每个模式。但这将返回你想要的东西。
str = "Hello world. Today is Wednesday"
puts str
matchedTerms = ["world", "word, is"]
matchedTerms.each do |term|
split = term.split
split.each do |word|
# case insensitive : str.gsub!(/#{word}/i, "<b>#{word}</b>")
str.gsub!(word, "<b>#{word}</b>")
end
end
puts str
>> Hello world. Today is Wednesday
>> Hello <b>world</b>. Today <b>is</b> Wednesday