我有一个由用户输入的字符串。他们可以添加与链接一样多的链接,但是我们只希望某些用户能够单击链接。我想做的是用其中的文本替换任何标签。如果有一个链接,我设法做到了,但是当有多个链接时,我不知道该怎么办。
这是我目前拥有的,并且已经尝试了多种变体来实现:
version
但是它仅适用于标记的第一个实例。
我收到的字符串如下:
url_text = text.split("<a").last.split("</a>").first.split('>').last
text.gsub! /<a.+a>/m, url_text
我想说: 等等等等等等。 谷歌 另一个链接: 测试链接
任何帮助将不胜感激。让我知道您是否需要更多代码或信息。
答案 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)
根据documentation,strip_tags
是ActionView::Helpers::SanitizeHelper
模块的一个方法。对我来说只是在我的类中包含这个模块,然后你可以使用它的方法:
strip_tags(your_text_with_html)