使用Rails 3.2。我想删除<b>
中的所有文字和标签,但我设法找到仅剥离标签的方法。:
string = "
<p>
<b>Section 1</b>
Everything is good.<br>
<b>Section 2</b>
All is well.
</p>"
string.strip_tags
# => "Section 1 Everthing is good. Section 2 All is well."
我想实现这个目标:
"Everthing is good. All is well."
我是否应该添加正则表达式匹配?
答案 0 :(得分:4)
“正确”的方式是使用像Nokogiri这样的html解析器
但是,对于这个简单的任务,您可以使用正则表达式。这很简单:
搜索:(?m)<b\s*>.*?<\/b\s*>
并将其替换为空字符串。之后,使用strip_tags
。
正则表达式解释:
(?m) # set the m modifier to match newlines with dots .
<b # match <b
\s* # match a whitespace zero or more times
> # match >
.*? # match anything ungreedy until </b found
<\/b # match </b
\s* # match a whitespace zero or more times
> # match >
答案 1 :(得分:3)
使用HTML / XML解析器完成此任务会好得多。 Ruby没有原生的,但是Nokogiri
很好并且包装了libxml / xslt
doc = Nokogiri::XML string
doc.xpath("//b").remove
result = doc.text # or .inner_html to include `<p>`
答案 2 :(得分:1)
您可以执行string.gsub(/<b>.*<\/b>/, '')
答案 3 :(得分:0)
如果你想删除标签,你可以试试这个:
ActionController::Base.helpers.sanitize("test<br>test<br>test<br> test")
如果你想删除你需要使用的所有标签:
ActionView::Base.full_sanitizer.sanitize("test<br>test<br>test<br> test")
这两者略有不同。第一个有利于脚本标签以防止Xss攻击,但它不会删除tages。第二个删除文本中的任何html标签。