Удаление HTML тегов в Javascript с помощью регулярных выражений


Я пытаюсь удалить все HTML-теги из строки в JavaScript. Вот что у меня есть... Я не могу понять, почему это не работает....кто-нибудь знает, что я делаю неправильно?

<script type="text/javascript">

var regex = "/<(.|n)*?>/";
var body = "<p>test</p>";
var result = body.replace(regex, "");
alert(result);

</script>

Спасибо большое!

10 89

10 ответов:

попробуйте это, отметив, что грамматика HTML слишком сложна для регулярных выражений, чтобы быть правильным в 100% случаев:

var regex = /(<([^>]+)>)/ig
,   body = "<p>test</p>"
,   result = body.replace(regex, "");

console.log(result);

Если вы хотите использовать библиотеку, такую как jQuery, вы могли бы просто сделать это:

console.log($('<p>test</p>').text());

Это старый вопрос, но я наткнулся на него и подумал, что поделюсь методом, который я использовал:

var body = '<div id="anid">some <a href="link">text</a></div> and some more text';
var temp = document.createElement("div");
temp.innerHTML = body;
var sanitized = temp.textContent || temp.innerText;

sanitized теперь будет содержать:"some text and some more text"

простой, не требуется jQuery, и он не должен подводить вас даже в более сложных случаях :)

Джеймс

это сработало для меня.

   var regex = /(&nbsp;|<([^>]+)>)/ig
      ,   body = tt
     ,   result = body.replace(regex, "");
       alert(result);

мой простой библиотека JavaScript под названием FuncJS имеет функцию под названием " strip_tags ()", которая выполняет эту задачу для вас - без необходимости вводить какие-либо регулярные выражения.

например, скажем, что вы хотите удалить теги из предложения - с помощью этой функции вы можете сделать это просто так:

strip_tags("This string <em>contains</em> <strong>a lot</strong> of tags!");

это приведет к "эта строка содержит много тегов!".

для лучшего понимания, пожалуйста, прочитайте документацию на GitHub FuncJS.

кроме того, если вы хотите, пожалуйста, обеспечить обратную связь через форму. Было бы очень полезно для меня!

вот как TextAngular (Wysisyg редактор) делает это. Я также нашел, что это самый последовательный ответ, который не является регулярным выражением.

@license textAngular
Author : Austin Anderson
License : 2013 MIT
Version 1.5.16
// turn html into pure text that shows visiblity
function stripHtmlToText(html)
{
    var tmp = document.createElement("DIV");
    tmp.innerHTML = html;
    var res = tmp.textContent || tmp.innerText || '';
    res.replace('\u200B', ''); // zero width space
    res = res.trim();
    return res;
}

вы можете использовать мощную библиотеку для строки управления, которая составляет undrescore.строка.js

_('a <a href="#">link</a>').stripTags()

=> 'a link'

_('a <a href="#">link</a><script>alert("hello world!")</script>').stripTags()

=> ' a linkalert ("Привет мир!")'

не забудьте импортировать эту библиотеку следующим образом:

        <script src="underscore.js" type="text/javascript"></script>
        <script src="underscore.string.js" type="text/javascript"></script>
        <script type="text/javascript"> _.mixin(_.str.exports())</script>

для правильного дезинфицирующего средства HTML в JS см. http://code.google.com/p/google-caja/wiki/JsHtmlSanitizer

<html>
<head>
<script type="text/javascript">
function striptag(){
var html = /(<([^>]+)>)/gi;
for (i=0; i < arguments.length; i++)
arguments[i].value=arguments[i].value.replace(html, "")
}
</script>
</head> 
<body>
       <form name="myform">
<textarea class="comment" title="comment" name=comment rows=4 cols=40></textarea><br>
<input type="button" value="Remove HTML Tags" onClick="striptag(this.form.comment)">
</form>
</body>
</html>

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

  "<<h1>h1>foo<<//</h1>h1/>"

этот вход гарантирует, что зачистка собирает набор тегов для вас и приведет к:

  "<h1>foo</h1>"

кроме того, текстовая функция jquery будет удалять текст, не окруженный тегами.

вот функция, которая использует jQuery, но должна быть более надежной против оба эти случая:

var stripHTML = function(s) {
    var lastString;

    do {            
        s = $('<div>').html(lastString = s).text();
    } while(lastString !== s) 

    return s;
};

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