Страницы

Поиск по вопросам

среда, 11 декабря 2019 г.

Как удалить все HTML-теги регулярным выражением?

#html #регулярные_выражения


Есть регулярное выражение (\<(/?[^>]+)>), которое оставляет HTML-тэги.
Как наоборот удалить все тэги, оставив только текст?
    


Ответы

Ответ 1



Так собственно её и можно использовать для чистки тегов, скормив в sub. В Python: >>> import re >>> re.sub(r'(\<(/?[^>]+)>)', '', 'Текст с
тегами
') 'Текст с тегами' В JavaScript: >>> console.log('Текст с
тегами
'.replace(/(\<(\/?[^>]+)>)/g, '')) "Текст с тегами" Только надо обязательно помнить, что никакое регулярное выражение не сможет правильно обработать сломанный html: >>> line = '
>>>2 + 3 < 6
True
>> re.sub(r'(\<(/?[^>]+)>)', '', line) ' >>>2 + 3 True тарий -->

Ответ 2



На данный момент, наиболее близкая к браузерной версия: function textByBrowser(html) { var div = document.createElement("div"); div.innerHTML = html; return div.textContent; } function textByRegex(html) { return html.replace(/
>alert(1)>', '123\n' ]; tests.map(textByBrowser) + "" == tests.map(textByRegex) // true Наличие угловых скобок в аттрибутах обрабатывается некорректно: textByBrowser('1
2
3') // 123 textByRegex('1
2
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]+[^>]*>

Комментариев нет:

Отправить комментарий