4

使用 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."

我也应该添加正则表达式匹配吗?

4

4 回答 4

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 >

Online demo

于 2013-10-28T14:39:44.313 回答
3

最好使用 HTML/XML 解析器来完成这项任务。Ruby 没有原生的,但是Nokogiri很好并且包装了 libxml/xslt

doc = Nokogiri::XML string
doc.xpath("//b").remove
result = doc.text # or .inner_html to include `<p>`
于 2013-10-28T14:38:41.027 回答
1

你可以做string.gsub(/<b>.*<\/b>/, '')

http://rubular.com/r/hhmpY6Q6fX

于 2013-10-28T14:44:09.680 回答
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 攻击,但它不会删除标签。第二个删除文本中的任何 html 标签。

于 2017-03-06T11:28:55.550 回答