Удалить HTML-теги в Javascript с помощью Regex

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

<script type="text/javascript">

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

</script>

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

Ответ 1

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

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

console.log(result);

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

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

Ответ 2

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

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, и он не должен позволять вам даже в более сложных случаях:)

Джеймс

Ответ 3

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

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

Ответ 4

Вот как это делает TextAngular (WYSISYG Editor). Я также нашел, что это самый последовательный ответ, который не содержит REGEX.

@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;
}

Ответ 5

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

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

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

Это приведет к появлению "Эта строка содержит много тегов!".

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

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

Ответ 6

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

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

= > 'link'

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

= > 'linkalert ( "hello world!" )'

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

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

Ответ 8

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

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

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

  "<h1>foo</h1>"

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

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

var stripHTML = function(s) {
    var lastString;

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

    return s;
};

Ответ 9

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

Ответ 10

То, как я это делаю, практически однострочно.

Функция создает объект Range, а затем создает DocumentFragment в Range со строкой в качестве дочернего содержимого.

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

Я понимаю, что этот вопрос старый, я просто думал, что мое решение было уникальным, и хотел поделиться. :)

function getTextFromString(htmlString) {
    return document
        .createRange()
        // Creates a fragment and turns the supplied string into HTML nodes
        .createContextualFragment(htmlString)
        // Gets the text from the fragment
        .textContent
        // Removes the Zero-Width Space, Zero-Width Joiner, Zero-Width No-Break Space, Left-To-Right Mark, and Right-To-Left Mark characters
        .replace(/[\u200B-\u200D\uFEFF\u200E\u200F]/g, '')
        // Trims off any extra space on either end of the string
        .trim();
}

var cleanString = getTextFromString('<p>Hello world! I <em>love</em> <strong>JavaScript</strong>!!!</p>');

alert(cleanString);

Ответ 11

Это решение для тегов HTML и & nbsp и т.д., И вы можете удалить и добавить условия чтобы получить текст без HTML, и вы можете заменить его любым.

convertHtmlToText(passHtmlBlock)
{
   str = str.toString();
  return str.replace(/<[^>]*(>|$)|&nbsp;|&zwnj;|&raquo;|&laquo;|&gt;/g, 'ReplaceIfYouWantOtherWiseKeepItEmpty');
}