首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用嵌套的html标记清除字符串,但保留<em>标记?

如何使用嵌套的html标记清除字符串,但保留<em>标记?
EN

Stack Overflow用户
提问于 2014-11-25 11:49:34
回答 3查看 681关注 0票数 0

我试图对Solr搜索结果进行清理,因为其中包含html标记:

ActionController::Base.helpers.sanitize( result_string )

很容易清除突出显示的字符串,比如:I know <ul><li>ruby</li> <li>rails</li></ul>

但是当结果突出显示时,我的内部有额外的重要标记- <em></em>

I <em>know</em> <<em>ul</em>><<em>li</em>><em>ruby</em></<em>li</em>> <<em>li</em>><em>rails</em></<em>li</em>></<em>ul</em>>

因此,当我使用嵌套的html和高亮标记对字符串进行清理时,我会得到带有htmls标记的和平号的字符串。这是不好的:)

如何清除带有<em>标记的突出显示的字符串以获得正确的结果(仅使用<em>标记的字符串)?

我找到了路,但它很慢而且不漂亮:

代码语言:javascript
运行
复制
string = 'I <em>know</em> <<em>ul</em>><<em>li</em>><em>ruby</em></<em>li</em>> <<em>li</em>><em>rails</em></<em>li</em>></<em>ul</em>>'

['p', 'ul', 'li', 'ol', 'span', 'b', 'br'].each do |tag| 
  string.gsub!( "<<em>#{tag}</em>>",  '' )
  string.gsub!( "</<em>#{tag}</em>>", '' )
end

string = ActionController::Base.helpers.sanitize string, tags: %w(em)

我如何优化它或使用更好的解决方案来完成它?编写一些正则表达式并删除html_tags,但保留<em></em>

帮帮忙,谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-25 15:30:12

你可以打电话给gsub!若要丢弃所有标记,但只保留独立或不包含在html标记中的标记,请执行以下操作。

代码语言:javascript
运行
复制
result_string.gsub!(/(<\/?[^e][^m]>)|(<<em>\w*<\/em>>)|(<\/<em>\w*<\/em>>)/, '')

会起作用

解释:

代码语言:javascript
运行
复制
# first group (<\/?[^e][^m]>) 
# find all html tags that are not <em> or </em>

# second group (<<em>\w*<\/em>>)
# find all opening tags that have <em> </em> inside of them like:
# <<em>li</em>>   or <<em>ul</em>>

# third group (<\/<em>\w*<\/em>>)
# find all closing tags that have <em> </em> inside of them:
# </<em>li</em>>   or  </<em>ul</em>>

# and gsub replaces all of this with empty string
票数 1
EN

Stack Overflow用户

发布于 2014-11-25 12:06:37

我想你可以用苏特

代码语言:javascript
运行
复制
Custom Use (only the mentioned tags and attributes are allowed, nothing else)
<%= sanitize @article.body, tags: %w(table tr td), attributes: %w(id class style) %>

所以,像这样的东西应该能起作用:

代码语言:javascript
运行
复制
sanitize result_string, tags: %w(em)
票数 0
EN

Stack Overflow用户

发布于 2014-11-25 12:06:40

使用消毒的附加参数,您可以指定允许哪些标记。

在您的示例中,请尝试:

代码语言:javascript
运行
复制
ActionController::Base.helpers.sanitize( result_string, tags: %w(em) ) 

它应该能起作用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27125948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档