删除正则表达式<;脚本>;以及Javascript中的内容

删除正则表达式<;脚本>;以及Javascript中的内容,javascript,regex,Javascript,Regex,我正在尝试从html正文中删除脚本及其内容,这就是我到目前为止所想到的 just_text = just_text.replace(/<\s*script[^>]*>(<\s*\/script[^>]*>|$)/ig, ''); just_text=just_text.replace(/]*>(]*>|$)/ig,”; 它不工作,因为我想,我仍然得到的内容 你能帮帮我吗 谢谢这些问题的答案总是一样的:不要使用正则表达式。相反,如果需要,可以解析HTML、修

我正在尝试从html正文中删除脚本及其内容,这就是我到目前为止所想到的

just_text = just_text.replace(/<\s*script[^>]*>(<\s*\/script[^>]*>|$)/ig, '');
just_text=just_text.replace(/]*>(]*>|$)/ig,”;
它不工作,因为我想,我仍然得到的内容

你能帮帮我吗


谢谢

这些问题的答案总是一样的:不要使用正则表达式。相反,如果需要,可以解析HTML、修改DOM并将其序列化回HTML

例如:

var container = document.createElement('div');
container.innerHTML = just_text;

// find and remove `script` elements
var scripts = container.getElementsByTagName('script');
for (var i = scripts.length; i--; ) {
    scripts[i].parentNode.removeChild(scripts[i]);
}

just_text = container.innerHTML;
如果要从页面本身删除
脚本
标记,则基本相同:

var scripts = document.body.getElementsByTagName('script');
for (var i = scripts.length; i--; ) {
    scripts[i].parentNode.removeChild(scripts[i]);
}

这些问题的答案总是一样的:不要使用正则表达式。相反,如果需要,可以解析HTML、修改DOM并将其序列化回HTML

例如:

var container = document.createElement('div');
container.innerHTML = just_text;

// find and remove `script` elements
var scripts = container.getElementsByTagName('script');
for (var i = scripts.length; i--; ) {
    scripts[i].parentNode.removeChild(scripts[i]);
}

just_text = container.innerHTML;
如果要从页面本身删除
脚本
标记,则基本相同:

var scripts = document.body.getElementsByTagName('script');
for (var i = scripts.length; i--; ) {
    scripts[i].parentNode.removeChild(scripts[i]);
}

您是否考虑使用HTML解析器代替常规表达式来执行此任务?它们不适合处理HTML。“从HTML正文中删除脚本及其内容”这是否意味着您正在修改实际页面,而不仅仅是一个HTML字符串?@FrédéricHamidi yeap我需要一个regexp@FelixKling我只存储字符串内容,我正在删除任何tags@Marios:浏览器内置了HTML解析和DOM操作功能,因为它是这样做的。你是否考虑过使用HTML解析器来代替正则表达式来完成这个任务?它们不适合处理HTML。“从HTML正文中删除脚本及其内容”这是否意味着您正在修改实际页面,而不仅仅是一个HTML字符串?@FrédéricHamidi yeap我需要一个regexp@FelixKling我只存储字符串内容,我正在删除任何tags@Marios:浏览器内置了HTML解析和DOM操作功能,因为它就是这么做的。回答正确,但是我不确定我是否喜欢
I--
作为循环条件。。。为什么不干脆
while(scripts.length)scripts[0].parentNode
etc?@thg435:我先有了它。然后我想起访问
.length
会重新评估
节点列表(更新它),我想避免这种情况。所以,以相反的顺序迭代列表似乎最有意义(不必使用这个循环设置,我只是喜欢它作为速记)。另一方面,可能访问列表中的某个元素(
scripts[i]
)也会对其进行重新评估,但无论如何都不会从中获得任何好处;)@FelixKling有用的答案,但我需要一个正则表达式,在这种情况下,big thank you虽然下次肯定会使用这种方法正确答案,但我不确定我是否喜欢
I--
作为循环条件。。。为什么不干脆
while(scripts.length)scripts[0].parentNode
etc?@thg435:我先有了它。然后我想起访问
.length
会重新评估
节点列表(更新它),我想避免这种情况。所以,以相反的顺序迭代列表似乎最有意义(不必使用这个循环设置,我只是喜欢它作为速记)。另一方面,可能访问列表中的某个元素(
scripts[i]
)也会对其进行重新评估,但无论如何都不会从中获得任何好处;)@FelixKling的回答很有用,但我需要一个正则表达式,在这种情况下,非常感谢,不过下次肯定会使用这种方法