programing

Regex를 사용하여 Javascript에서 HTML 태그 제거

nasanasas 2020. 8. 17. 09:08
반응형

Regex를 사용하여 Javascript에서 HTML 태그 제거


Javascript의 문자열에서 모든 html 태그를 제거하려고합니다. 여기에 내가 가진 것이 ... 왜 작동하지 않는지 알 수 없습니다 .... 내가 뭘 잘못하고 있는지 아는 사람 있나요?

<script type="text/javascript">

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

</script>

감사합니다!


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

다음은 TextAngular (WYSISYG Editor)가 수행하는 방법입니다. 나는 또한 이것이 가장 일관된 대답 인 NO 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;
}

undrescore.string.js 인 관리 문자열에 강력한 라이브러리를 사용할 수 있습니다.

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

=> '링크'

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

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

이 lib를 다음과 같이 가져 오는 것을 잊지 마십시오.

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

FuncJS라는 간단한 JavaScript 라이브러리에는 정규식을 입력하지 않고도 작업을 수행하는 "strip_tags ()"라는 함수가 있습니다.

예를 들어 문장에서 태그를 제거하고 싶다고 가정 해 보겠습니다.이 함수를 사용하면 다음과 같이 간단하게 수행 할 수 있습니다.

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

그러면 "이 문자열에는 많은 태그가 포함되어 있습니다!"가 생성됩니다.

더 나은 이해를 위해 GitHub FuncJS 에서 문서를 읽으십시오 .

또한 원하는 경우 양식을 통해 몇 가지 피드백을 제공하십시오. 나에게 매우 도움이 될 것입니다!


For a proper HTML sanitizer in JS, see 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>

The selected answer doesn't always ensure that HTML is stripped, as it's still possible to construct an invalid HTML string through it by crafting a string like the following.

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

This input will ensure that the stripping assembles a set of tags for you and will result in:

  "<h1>foo</h1>"

additionally jquery's text function will strip text not surrounded by tags.

Here's a function that uses jQuery but should be more robust against both of these cases:

var stripHTML = function(s) {
    var lastString;

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

    return s;
};

The way I do it is practically a one-liner.

The function creates a Range object and then creates a DocumentFragment in the Range with the string as the child content.

Then it grabs the text of the fragment, removes any "invisible"/zero-width characters, and trims it of any leading/trailing white space.

I realize this question is old, I just thought my solution was unique and wanted to share. :)

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

This is a solution for HTML tag and &nbsp etc and you can remove and add conditions to get the text without HTML and you can replace it by any.

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

Like others have stated, regex will not work. Take a moment to read my article about why you cannot and should not try to parse html with regex, which is what you're doing when you're attempting to strip html from your source string.

참고URL : https://stackoverflow.com/questions/1499889/remove-html-tags-in-javascript-with-regex

반응형