跳到主要内容

简述写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把scrīpt标记及其内容都去掉) ?

参考答案:

要过滤掉网页上的所有 JavaScript 和 VBScript 脚本,你可以使用正则表达式来匹配 <script> 标签及其内容。请注意,正则表达式在处理 HTML 或 XML 这类复杂的嵌套结构时可能会变得复杂且容易出错,因为正则表达式不是为此类任务设计的。然而,对于简单的场景,以下是一个基本的正则表达式,它尝试匹配 <script> 标签及其内容,直到遇到关闭标签 </script>

<script\b[^>]*>(.*?)</script>

这个正则表达式的解释如下:

  • <script\b:匹配字面字符串 <script\b 是一个单词边界,确保我们不会匹配到如 <scriptlet> 这样的标签。
  • [^>]*>:匹配任何不是 > 的字符零次或多次,直到遇到 >,这样可以匹配到 <script> 标签的其余部分。
  • (.*?):这是一个非贪婪匹配,匹配任何字符零次或多次,直到遇到下一个 </script>。注意,这里的点号 . 默认不匹配换行符,所以如果你希望它跨越多行匹配,你可能需要使用 DOTALLs 标志(取决于你使用的编程语言或工具)。
  • </script>:匹配字面字符串 </script>

在 Python 中,你可以这样使用它:

import re

def remove_scripts(html):
    cleaned_html = re.sub(r'<script\b[^>]*>(.*?)</script>', '', html, flags=re.DOTALL)
    return cleaned_html

# 示例用法
html = """
<html>
<body>
    <h1>Hello, World!</h1>
    <script type="text/javascript">
        alert('This is a JavaScript script.');
    </script>
    <vbscript>
        MsgBox("This is a VBScript script.")
    </vbscript>
</body>
</html>
"""

cleaned_html = remove_scripts(html)
print(cleaned_html)

但是,再次强调,使用正则表达式处理 HTML 或 XML 可能会遇到问题,特别是当遇到复杂的结构或不规则的标签时。对于更可靠的处理,你可能需要使用 HTML 解析器或 DOM 操作库。