【问题标题】:Replace html tags with whitespaces用空格替换 html 标签
【发布时间】:2015-04-11 13:16:29
【问题描述】:

我正在使用strip_tags 方法,它从我的字符串中删除所有标签,但是在删除了一些缺少空格的文本之后,尤其是在一个标签结束而另一个标签开始的地方。有什么方法可以在删除标签的地方插入空格?寻找前任。下面

str
 => "<span>Class GOesHere</span><div>SomeExtra Tag</div>" 

helper.strip_tags(str)
 => "Class GOesHereSomeExtra Tag" 

【问题讨论】:

    标签: html ruby-on-rails ruby regex


    【解决方案1】:

    尝试像这样使用正则表达式:

    str.gsub!(/<.*?>/, " ")
    # => " Class GOesHere  SomeExtra Tag "
    

    【讨论】:

    • .*? 表示&lt;&gt; 内的所有内容?
    • 以非贪婪的方式是的。如果您删除?,它将变得贪婪并用" "替换整个字符串
    • 基本上它会在&lt;p title="a &gt; b"&gt;foo&lt;/p&gt;中断
    • @HamZa 是的。我只处理基本示例。
    【解决方案2】:
    str
     => "<span>Class GOesHere</span><div>SomeExtra Tag</div>"
    

    您可以在删除标签之前更改字符串,例如

    str.gsub!('><', '> <')
    

    它应该产生

    str
     => "<span>Class GOesHere</span> <div>SomeExtra Tag</div>" 
    

    【讨论】:

    • 如果你有像&lt;br&gt;这样的简单标签,它就不起作用
    【解决方案3】:

    我建议解析 HTML 并提取文本。 Nokogiri,一个非常有名的 gem 应该可以帮助轻松解决这个问题:

    require 'nokogiri'
    => false
    > str = "<span>Class GOesHere</span><div>SomeExtra Tag</div>"
    => "<span>Class GOesHere</span><div>SomeExtra Tag</div>"
    > Nokogiri::HTML(str).text
    => "Class GOesHereSomeExtra Tag"
    

    更新

    这将搜索 html 中的所有文本节点并映射文本内容。结果数组与空格分隔符连接:

    > Nokogiri::HTML(str).xpath('//text()').map(&:text).join(' ')
    => "Class GOesHere SomeExtra Tag"
    

    【讨论】:

    • 我完全同意在这种情况下使用 HTML 解析器,但输出与 OP 当前的输出相同。
    • 添加了解决方案。感谢@HamZa 指出这一点。我看错了最后一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多