[英]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 = /( |<([^>]+)>)/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 標記和   等的解決方案,您可以刪除和添加條件以獲取沒有 HTML 的文本,您可以將其替換為任何內容。
convertHtmlToText(passHtmlBlock)
{
str = str.toString();
return str.replace(/<[^>]*(>|$)| |‌|»|«|>/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.