我该如何解决以下问题?
我有一个像下面这样的 html 字符串:
<p>aaa, b aa aaaaa?<br/>Next possible text b bb aa b.</p>
现在我只想替换例如
"aaa"
和
"<div class='special'>aaa</div>"
替换后的新字符串:
<p><div class='special'>aaa</div>, b aa aaaaa?<br/>Next possible text b bb aa b.</p>
所以我想要一个通用替换器,它只替换一个完全匹配的字符串。“aaa”只是一个例子。它也可以是“bb”或“两个词”(=> 两个词,所以我认为 text.split 不起作用)。
有人对这种动态查找、匹配和替换器有想法吗?
我已经尝试过,如下所示:
items = ["aaa", "a", "aa", "aa b", "c"]
text = "<p>aaa, b aa aaaaa?<br/>Next possible text b bb aa b.</p>"
words = text.split => ["<p>aaa,", "b", "aa", "aaaaa?<br/>Next", "possible", "text", "b", "bb", "aa", "b.</p>"]
new_words = []
words.each do |w|
items.each do |item|
if w == item
w = '<div class="special">#{item}</div>'
end
end
new_words << w
end
text = new_words.join(" ")
结果:
"<p>aaa, b <div class='special'>aa</div> aaaaa?<br/>Next possible text b bb <div class='special'>aa</div> b.</p>"
但它应该是:
"<p><div class='special'>aaa</div>, b <div class='special'>aa</div> aaaaa?<br/>Next possible text b bb <div class='special'>aa b</div>.</p>"
我最大的问题是:
- 示例中的特殊字符,例如“,.?()%€” - 字符串末尾的字符 => “aaa”
- 具有相同部分的子字符串 => 像“aaa”和“aa”
- 两个词作为一个项目=>例如示例中的“aa b”
有人有解决我问题的想法吗?
编辑:某些东西只是我的替代品的占位符..我真正的替代品也可能是:
%Q( <dfn title="#{strip_tags item.text}">#{item.name}</dfn> )
item.text 可以是所有内容 => 也可以包含“aaa” item.name 例如“aaa”
所以多个 gsub 也会替换已经替换的内容。