我正在使用ROR制作基本讨论板.当用户发布对消息的响应时,输入文本区域使用标记预先填充引号中的消息:[QUOTE].因此格式为:
[QUOTE]引用的消息在这里[/ QUOTE]
目前,我有一个简单的解决方案,只要[QUOTE]或[/ QUOTE]仍然存在,就可以使用message.sub('[QUOTE]','html在这里')用HTML替换[QUOTE]和[/ QUOTE] .当我回复引用的消息时,我将HTML转换回[QUOTE]标签,以确保预先填充的输入textarea中没有HTML.因此,引用的引用将如下所示:
[QUOTE] [QUOTE]引用此处留言[/ QUOTE] [/ QUOTE]
这是问题所在.如果我再次运行当前的方法,我将获得重复的HTML字段,如:
<div class='test'><div class='test'>quoted message goes here</div></div>
Run Code Online (Sandbox Code Playgroud)
相反,我希望能够有一个看起来像这样的解决方案:
<div class='test1'><div class='test2'>quoted message goes here</div></div>
Run Code Online (Sandbox Code Playgroud)
等等......关于循环这个的最佳方法的任何建议?
如果你想进行深度跟踪,你必须使用块方法gsub:
text = "[QUOTE][QUOTE]quoted message here[/QUOTE][/QUOTE]"
quote_level = 0
new_text = text.gsub(/\[\/?QUOTE\]/) do |m|
case (m)
when '[QUOTE]'
quote_level += 1
"<div class='test#{quote_level}'>"
when '[/QUOTE]'
quote_level -= 1
"</div>"
end
end
puts new_text.inspect
# => "<div class='test1'><div class='test2'>quoted message here</div></div>"
Run Code Online (Sandbox Code Playgroud)
处理无效的嵌套对时,可以使其更加健壮,但对于格式良好的标记,这应该可行.