从字符串中删除所有标签

时间:2019-01-28 15:41:11

标签: ruby-on-rails ruby

我有一个由用户输入的字符串。他们可以添加与链接一样多的链接,但是我们只希望某些用户能够单击链接。我想做的是用其中的文本替换任何标签。如果有一个链接,我设法做到了,但是当有多个链接时,我不知道该怎么办。

这是我目前拥有的,并且已经尝试了多种变体来实现:

version

但是它仅适用于标记的第一个实例。

我收到的字符串如下:

url_text = text.split("<a").last.split("</a>").first.split('>').last
text.gsub! /<a.+a>/m, url_text

我想说: 等等等等等等。 谷歌 另一个链接: 测试链接

任何帮助将不胜感激。让我知道您是否需要更多代码或信息。

4 个答案:

答案 0 :(得分:5)

您可以使用strip_tags(剥离所有标签)或strip_links(剥离链接)。

在Rails控制台中:

> text = '<div>blah blah blah.<br /><br /></div>\r\n<div><a href=\"http://www.google.com\">Google</a><br />Another link: <br /> <a href=\"http://www.test.com\">Test Link</a><br /><br /></div>'
=> "<div>blah blah blah.<br /><br /></div>\\r\\n<div><a href=\\\"http://www.google.com\\\">Google</a><br />Another link: <br /> <a href=\\\"http://www.test.com\\\">Test Link</a><br /><br /></div>"
> helper.strip_tags(text)
=> "blah blah blah.\\r\\nGoogleAnother link:  Test Link"

答案 1 :(得分:3)

使用Rails助手

ActionView::Base.full_sanitizer.sanitize('text = <div>blah blah blah.<br /><br /></div>\r\n<div><a href=\"http://www.google.com\">Google</a><br />Another link: <br /> <a href=\"http://www.test.com\">Test Link</a><br /><br /></div>"
')

"text = blah blah blah.\\r\\nGoogleAnother link:  Test Link\"\n" 

答案 2 :(得分:2)

@mrzasa似乎已经破解了它,尽管如果您想知道正则表达式为什么不起作用,那是因为它过于贪婪。

使用?惰性运算符意味着扫描将返回尽可能少的标准字符。

以下内容将懒惰的运算符添加到搜索中,我相信它可以按您的预期工作:

text = "<div>blah blah blah.<br /><br /></div>\r\n<div><a href=\"http://www.google.com\">Google</a><br />Another link: <br /> <a href=\"http://www.test.com\">Test Link</a><br /><br /></div><div>blah blah blah.<br /><br /></div>\r\n<div><a href=\"http://www.google.com\">Google</a><br />Another link: <br /> <a href=\"http://www.test.com\">Test Link</a><br /><br /></div>"
text.gsub(/<a.*?>(.+?)<\/a>/, '\1')

# => "<div>blah blah blah.<br /><br /></div>\r\n<div>Google<br />Another link: <br /> Test Link<br /><br /></div><div>blah blah blah.<br /><br /></div>\r\n<div>Google<br />Another link: <br /> Test Link<br /><br /></div>"

'\1'作为gsub的第二个参数,只是替换为第一个匹配项。

希望它在某种程度上有用,并且如果您想使用正则表达式,则可以灵活选择。

答案 3 :(得分:0)

根据documentationstrip_tagsActionView::Helpers::SanitizeHelper模块的一个方法。对我来说只是在我的类中包含这个模块,然后你可以使用它的方法:

strip_tags(your_text_with_html)