有条件地剥离HTML节点 - Regexp / gsub

时间:2010-09-13 10:14:18

标签: ruby-on-rails regex

我想通过删除某些html节点(包括子节点(特别是标题和图像)并删除所有其他标签来生成文章的搜索预览,例如。离开子节点时的段落。

e.g。

"<h2>Subject</h2><p>Subject is the who, what, where, why and when.</p>".gsub(/<\/?[^>]*>/, '')

结果

Subject Subject is the who, what, where, why and when.

然而我需要

Subject is the who, what, where, why and when.

我正在使用Rails插件Loofah来清理用户输入,这很有用;实际上我可以定义一个擦除器来执行此操作,但似乎正则表达式对于这个简单的操作就足够了。

提前感谢任何建议。

2 个答案:

答案 0 :(得分:1)

使用多个正则表达式:

"<h2>Subject</h2><p>Subject is the who, what, where, why and when.</p>".
    gsub(/<h\d>[^>]*>/,'').
    gsub(/<img[^>]*>/,'').
    gsub(/<\/?[^>]*>/, '')

但是应该注意到,你正在达到regexp在处理html时可以处理的复杂性的极限。如果你需要做更复杂的事情(比如根据类名等删除)那么你应该真的使用html解析器。

答案 1 :(得分:0)

尝试:

myline = line.gsub!(/(<[^>]*>)|\n|\t/s) {" "}