使用正则表达式删除Javascript中的HTML标记
我试图删除Javascript中字符串中的所有html标记。 这是我所拥有的。。。我不明白为什么它不起作用……有人知道我做错了什么吗使用正则表达式删除Javascript中的HTML标记,javascript,regex,Javascript,Regex,我试图删除Javascript中字符串中的所有html标记。 这是我所拥有的。。。我不明白为什么它不起作用……有人知道我做错了什么吗 <script type="text/javascript"> var regex = "/<(.|\n)*?>/"; var body = "<p>test</p>"; var result = body.replace(regex, ""); alert(result); </script>
<script type="text/javascript">
var regex = "/<(.|\n)*?>/";
var body = "<p>test</p>";
var result = body.replace(regex, "");
alert(result);
</script>
var regex=“/”;
var body=“测试””;
var result=body.replace(regex,“”);
警报(结果);
非常感谢 试试看,注意HTML的语法太复杂,正则表达式无法100%正确:
var regex = /(<([^>]+)>)/ig
, body = "<p>test</p>"
, result = body.replace(regex, "");
console.log(result);
var regex=/(]+)>)/ig
,body=“测试”
,result=body.replace(regex,“”);
控制台日志(结果);
如果您愿意使用这样的库,您可以简单地执行以下操作:
console.log($('<p>test</p>').text());
console.log($('test').text();
有关JS中合适的HTML消毒剂,请参见这是一个老问题,但我无意中发现了它,并想与大家分享我使用的方法:
var body='some and some more text';
var temp=document.createElement(“div”);
temp.innerHTML=主体;
var sanitized=temp.textContent | | temp.innerText;
净化后的
现在将包含:“一些文本和更多文本”
简单,不需要jQuery,即使在更复杂的情况下也不会让您失望。mySimpleJavaScript库FuncJS有一个名为“strip_tags()”的函数,它为您完成任务,而不需要您输入任何正则表达式 例如,假设您想从句子中删除标记-使用此函数,您可以简单地如下操作:
strip_tags("This string <em>contains</em> <strong>a lot</strong> of tags!");
strip_标签(“此字符串包含大量标签!”);
这将产生“此字符串包含许多标记!”
为了更好地理解,请阅读以下文档:
此外,如果您愿意,请通过表格提供一些反馈。这对我很有帮助 您可以使用功能强大的管理字符串库
(('a').stripTags()
=>“链接”
_('a <a href="#">link</a><script>alert("hello world!")</script>').stripTags()
(警报(“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>
_.mixin(u.str.exports())
所选答案并不总是确保HTML被剥离,因为仍有可能通过它构建一个无效的HTML字符串,方法如下所示
"<<h1>h1>foo<<//</h1>h1/>"
“foo
函数striptag(){
var html=/(]+)>)/gi;
对于(i=0;i
这对我很有效
var regex = /( |<([^>]+)>)/ig
, body = tt
, result = body.replace(regex, "");
alert(result);
var regex=/(|]+)>)/ig
,body=tt
,result=body.replace(regex,“”);
警报(结果);
正如其他人所说,正则表达式不起作用。请花一点时间阅读我的文章,了解为什么您不能也不应该尝试使用正则表达式解析html,这就是您在尝试从源字符串中剥离html时所做的事。以下是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;
}
我做这件事的方式实际上是一行
函数创建一个,然后在范围内创建一个,并将字符串作为子内容
然后它抓取片段的文本,删除任何“不可见的”/“零宽度”字符,并修剪任何前导/尾随空格
我意识到这个问题由来已久,我只是觉得我的解决方案很独特,想与大家分享。:)
函数getTextFromString(htmlString){
返回文件
.createRange()
//创建一个片段并将提供的字符串转换为HTML节点
.createContextualFragment(htmlString)
//从片段中获取文本
.textContent
//删除零宽度空格、零宽度连接符、零宽度无中断空格、从左到右标记和从右到左标记字符
.替换(/[\u200B-\u200D\uFEFF\u200E\u200F]/g',)
//修剪字符串两端的多余空间
.trim();
}
var cleanString=getTextFromString(“helloworld!我爱JavaScript!”);
警报(清除字符串);
这是一个针对HTML标记等的解决方案,您可以删除和添加条件
要获得没有HTML的文本,您可以用任意文本替换它
convertHtmlToText(passHtmlBlock)
{
str = str.toString();
return str.replace(/<[^>]*(>|$)| |‌|»|«|>/g, 'ReplaceIfYouWantOtherWiseKeepItEmpty');
}
convertHtmlText(passHtmlBlock)
{
str=str.toString();
返回str.replace(/]*(>|$)| | | | | | | | | | | | | | | | | | | | | | |;
}
为什么要将正则表达式包装成字符串?var regex=/(]+)>)/ig;这不起作用。具体来说,它会在短标记上失败:这是一个老问题,但我将在这里发布:尝试在上运行此命令。第一个失败是因为HTML解析器不要求最后一个标记由
关闭,第二个失败是因为图像加载甚至在解析的DOM树添加到DOM之前就开始了,并且$(“”)
调用HTML解析器。如果属性值中包含
,则正则表达式解决方案也将失败;像这样
你好。基本上,它所做的就是创建一个新的DIV,将内部HTML内容设置为所提供的内容(我假设这意味着任何HTML代码都被解析),然后请求DIV的所有文本内容,忽略所述HTML。在我的浏览器中,对象没有字段innerText
@Adrian。最后一行将选择temp.textContent
的输出(如果存在),如果没有,则仅尝试temp.innerText
)。您的浏览器应该有前者,但对于没有前者的浏览器,则使用后者:)再次研究后(有很多答案)。我正在使用这种方法。这与文本中使用的方法相同。他们已经添加了一些额外的内容,我已经在这个线程中包含了这些内容。这个解决方案对我来说失败了,我正在使用@kolkov文本编辑器进行Angular。您是否可以提供strip\u tags()
的功能,而不仅仅是升级您的库和
<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>
var regex = /( |<([^>]+)>)/ig
, body = tt
, result = body.replace(regex, "");
alert(result);
@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;
}
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);
convertHtmlToText(passHtmlBlock)
{
str = str.toString();
return str.replace(/<[^>]*(>|$)| |‌|»|«|>/g, 'ReplaceIfYouWantOtherWiseKeepItEmpty');
}