插件窝 干货文章 如何使用正则表达式精准匹配HTML文档中的script标签内容

如何使用正则表达式精准匹配HTML文档中的script标签内容

如何使用正则表达式精准匹配HTML文档中的script标签内容

在网页开发和数据抓取过程中,经常需要提取HTML文档中的JavaScript代码。本文将详细介绍如何使用正则表达式精准匹配script标签及其内容。

基础匹配方法

最简单的正则表达式可以这样写:

<script[^>]*>([\s\S]*?)</script>

这个表达式可以匹配:

  1. 以<script开头的标签
  2. 包含任意属性
  3. 捕获标签之间的所有内容(包括换行)
  4. 非贪婪匹配,防止匹配到文档末尾

高级匹配技巧

1. 排除注释内容:

<script[^>]*>(?![\s\S]*?<!--)([\s\S]*?)</script>

2. 匹配特定类型的script:

<script[^>]*type=["']text/javascript["'][^>]*>([\s\S]*?)</script>

3. 处理单行模式:

(?s)<script.*?>(.*?)</script>

注意事项

  • 正则表达式可能无法处理所有边缘情况,对于复杂的HTML文档建议使用专门的解析器
  • 注意CDATA区块的处理
  • 考虑script标签中可能包含的其他script标签字符串的情况
  • 性能考虑:非贪婪匹配比贪婪匹配更高效

实际应用示例

Python代码示例:

import re

html = """
<html>
<head>
<script type="text/javascript">
// JavaScript代码
var x = 1;
</script>
</head>
</html>
"""

pattern = re.compile(r'<script[^>]*>([\s\S]*?)</script>', re.IGNORECASE)
matches = pattern.findall(html)

for match in matches:
    print(match.strip())

通过以上方法,您可以有效地从HTML文档中提取script标签内容。但请记住,对于复杂的HTML解析任务,专业的HTML解析器如BeautifulSoup或DOMParser可能是更好的选择。