Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式删除Javascript中的HTML标记_Javascript_Regex - Fatal编程技术网

使用正则表达式删除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>

我试图删除Javascript中字符串中的所有html标记。 这是我所拥有的。。。我不明白为什么它不起作用……有人知道我做错了什么吗

<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 = /(&nbsp;|<([^>]+)>)/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(/<[^>]*(>|$)|&nbsp;|&zwnj;|&raquo;|&laquo;|&gt;/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 = /(&nbsp;|<([^>]+)>)/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(/<[^>]*(>|$)|&nbsp;|&zwnj;|&raquo;|&laquo;|&gt;/g, 'ReplaceIfYouWantOtherWiseKeepItEmpty');
}