Если возможно, избегайте использования dangerouslySetInnerHTML
.
Альтернативным решением может быть разбиение вашего текста на массив, а затем рендеринг нового div
для каждой «новой строки».
Конечно, вам нужно было бы придумать лучший key
для текста, поскольку там мог бы быть дублированный текст - хотя это отдельный вопрос сам по себе.
class Hello extends React.Component {
constructor(props) {
super(props)
this.state = {
parsedText: [
"Some text",
"More text",
"Keep on texting"
]
}
}
render() {
return <div>{this.state.parsedText.map(text => <div key={text}>{text}</div>)}</div>;
}
}
ReactDOM.render(
<Hello/>,
document.getElementById('container')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>
Можно использовать регулярное выражение для удаления всех тегов:
>>> import re
>>> s = 'blah blah <a href="blah">link</a>'
>>> re.sub('<[^>]*>', '', s)
'blah blah link'
Когда Ваше решение для регулярного выражения врежется в стену, попробуйте это супер легкое (и надежный) программа BeautifulSoup.
from BeautifulSoup import BeautifulSoup
html = "<a> Keep me </a>"
soup = BeautifulSoup(html)
text_parts = soup.findAll(text=True)
text = ''.join(text_parts)
Существует также небольшая библиотека, названная stripogram, который может использоваться для снимания некоторых или всех HTML-тэгов.
Можно использовать его как это:
from stripogram import html2text, html2safehtml
# Only allow <b>, <a>, <i>, <br>, and <p> tags
clean_html = html2safehtml(original_html,valid_tags=("b", "a", "i", "br", "p"))
# Don't process <img> tags, just strip them out. Use an indent of 4 spaces
# and a page that's 80 characters wide.
text = html2text(original_html,ignore_tags=("img",),indent_width=4,page_width=80)
Таким образом, если Вы хотите просто разделить весь HTML, Вы передаете valid_tags = () к первой функции.
Можно найти документацию здесь.
Regexs, BeautifulSoup, html2text не работают, если атрибут имеет'>
'в нем. Посмотрите “>” (БОЛЬШЕ U+003E - ЧЕМ ЗНАК) позволен в значении атрибута элемента HTML?
'Синтаксический анализатор HTML/XML, которому основанное на ' решение могло бы помочь в таких случаях, например, stripogram предложенный @MrTopf, действительно работает.
Вот находящееся в ElementTree решение:
####from xml.etree import ElementTree as etree # stdlib
from lxml import etree
str_ = 'blah blah <a href="blah">link</a> END'
root = etree.fromstring('<html>%s</html>' % str_)
print ''.join(root.itertext()) # lxml or ElementTree 1.3+
Вывод:
blah blah link END
>>> import re
>>> s = 'blah blah <a href="blah">link</a>'
>>> q = re.compile(r'<.*?>', re.IGNORECASE)
>>> re.sub(q, '', s)
'blah blah link'