簡體   English   中英

使用正則表達式刪除 Javascript 中的 HTML 標簽

[英]Remove HTML Tags in Javascript with Regex

我正在嘗試從 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 編輯器)是如何做到的。 我還發現這是最一致的答案,即沒有正則表達式。

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

這是 HTML 標記和 &nbsp 等的解決方案,您可以刪除和添加條件以獲取沒有 HTML 的文本,您可以將其替換為任何內容。

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

我的名為 FuncJS 的簡單JavaScript 庫有一個名為“strip_tags()”的函數,它為你完成任務——不需要你輸入任何正則表達式。

例如,假設您想從句子中刪除標簽 - 使用此功能,您可以簡單地這樣做:

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

這將產生“此字符串包含很多標簽!”。

為了更好地理解,請閱讀GitHub FuncJS 上的文檔。

此外,如果您願意,請通過表單提供一些反饋。 這對我很有幫助!

你可以使用一個強大的庫來管理字符串,它是undrescore.string.js

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

=> '一個鏈接'

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

=> '一個鏈接警報(“你好世界!”)'

不要忘記導入這個庫如下:

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

有關 JS 中適當的 HTML 消毒劑,請參閱http://code.google.com/p/google-caja/wiki/JsHtmlSanitizer

選定的答案並不總是確保 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>
<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>

我這樣做的方式實際上是單行的。

該函數創建一個Range 對象,然后在 Range 中創建一個DocumentFragment ,以字符串作為子內容。

然后它抓取片段的文本,刪除任何“不可見”/零寬度字符,並修剪它的任何前導/尾隨空白。

我意識到這個問題很老,我只是認為我的解決方案很獨特,想分享一下。 :)

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

如果您想使用庫執行此操作並且不使用 JQuery,那么專門用於此目的的最佳 JS 庫是striptags

它比正則表達式 (17.9kb) 重,但如果您需要比正則表達式所能提供的更高的安全性/不關心額外的 17.6kb,那么它是最好的解決方案。

就像其他人所說的那樣,正則表達式將不起作用。 花一點時間來閱讀我的文章為什么你不能,不應該試圖解析HTML與正則表達式,這是你當你試圖從源字符串中去除HTML做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM