#html #регулярные_выражения
Есть регулярное выражение (\<(/?[^>]+)>), которое оставляет HTML-тэги. Как наоборот удалить все тэги, оставив только текст?
Ответы
Ответ 1
Так собственно её и можно использовать для чистки тегов, скормив в sub. В Python: >>> import re >>> re.sub(r'(\<(/?[^>]+)>)', '', 'Текст с
тегами') 'Текст с тегами' В JavaScript: >>> console.log('Текст с
тегами'.replace(/(\<(\/?[^>]+)>)/g, '')) "Текст с тегами" Только надо обязательно помнить, что никакое регулярное выражение не сможет правильно обработать сломанный html: >>> line = '>>>2 + 3 < 6>> re.sub(r'(\<(/?[^>]+)>)', '', line) ' >>>2 + 3 True тарий -->
TrueОтвет 2
На данный момент, наиболее близкая к браузерной версия: function textByBrowser(html) { var div = document.createElement("div"); div.innerHTML = html; return div.textContent; } function textByRegex(html) { return html.replace(/
2
3') // 123
textByRegex('12
3') // 1">23
И с мнемониками надо разобраться по своему усмотрению:
textByBrowser("<") // "<"
textByRegex("<") // "<"
Обращаю внимание, что ни один из способов получения текста не является защитой от
XSS-атак. При выводе пользовательского текста на странице всегда надо применять экранирование.
console.log(textByBrowser('<script>alert("XSS!")</script>'));
//
PS: Более ранняя версия ответа с другим кодом доступна в истории.
Ответ 3
(?:<).*?(?:>) - вырезает все теги
Ответ 4
В php есть функция strip_tags - удаляет HTML и PHP тэги из строки
Ответ 5
Как по мне, более точное определение тега будет таким В JavaScript: <\/?[A-Za-z]+[^>]*>
Комментариев нет:
Отправить комментарий