查找嵌套开始和结束标签的最佳方法

2024-03-23

我正在使用 ROR 制作一个基本的讨论板。当用户发布对消息的响应时,输入文本区域将使用标签预先填充在引号中的消息:[QUOTE]。因此,格式为:

[QUOTE]此处引用的消息[/QUOTE]

目前,我有一个简单的解决方案,使用 HTML 替换 [QUOTE] 和 [/QUOTE]message.sub('[QUOTE]', 'html 位于此处')只要 [QUOTE] 或 [/QUOTE] 仍然存在。当我去回复引用的消息时,我将 HTML 转换回 [QUOTE] 标记,以确保预填充的输入文本区域中没有 HTML。因此,引用的引用将如下所示:

[QUOTE][QUOTE]此处引用消息[/QUOTE][/QUOTE]

问题就在这里。如果我再次运行当前方法,我将得到重复的 HTML 字段,例如:

<div class='test'><div class='test'>quoted message goes here</div></div>

相反,我希望能够有一个如下所示的解决方案:

<div class='test1'><div class='test2'>quoted message goes here</div></div>

等等... 关于循环这个的最佳方法有什么建议吗?


如果你想进行深度跟踪,你必须使用块方法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>"

在处理无效的嵌套对时,您可以使其更加健壮,但对于格式良好的标签来说,这应该可行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找嵌套开始和结束标签的最佳方法 的相关文章

随机推荐