Удалить все теги из строки - PullRequest
0 голосов
/ 28 января 2019

У меня есть строка, которая вводится пользователем.Они могут добавить столько ссылок, сколько и ссылок, но мы хотим, чтобы только некоторые пользователи могли щелкнуть ссылку.То, что я пытаюсь сделать, это заменить любой тег только текстом внутри него.Мне удалось сделать это, если есть одна ссылка, но я не могу понять, как это сделать, когда их несколько.

Это то, что у меня есть в настоящее время, и я пробовал много вариантов, чтобы добраться до этого:

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

Но это работает только для первого экземпляра тега.

Строка, которую я получаю, выглядит следующим образом:

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>"

Я хочу сказать: blahбла блаGoogle Другая ссылка: Тестовая ссылка

Любая помощь будет оценена.Дайте мне знать, если вам нужно больше кода или информации.

Ответы [ 3 ]

0 голосов
/ 28 января 2019

@ mrzasa, похоже, взломал его, хотя, если вам интересно, почему регулярное выражение не работает, это потому, что оно слишком жадное.

Использование оператора ? lazy означает, что сканирование возвращаеткак можно меньше символов критериев.

Следующее добавляет ленивые операторы к поиску, и я считаю, что работает так, как вы предполагали:

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 просто заменяется на первое совпадение.

Надеюсь, что это в какой-то мере полезно и дает гибкую возможность, если вы предпочитаете использовать регулярное выражение.

0 голосов
/ 28 января 2019

Используйте помощник рельсов

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" 
0 голосов
/ 28 января 2019

Вы можете использовать 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...