[英]Regular Expression to match different script tags in python
我需要匹配不同的脚本标签,例如这样
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
jQuery(document).ready(function()
{
jQuery("#gift_cards").tooltip({ effect: \'slide\'});
});
</script>
<script>dasdfsfsdf</script>
我也只需要获取标签和创建正则表达式的组中的src内容
(<\s*?script[\s\S]*?(?:src=['"](\S+?)['"])?\B[\S\s]*?>)([\s\S]*?)(</script>)
这与最后一个脚本标签不匹配
它出什么问题了?
编辑:删除\\ B确实匹配所有脚本标签,但是后来我没有在单独的组中获得src属性的内容。 我需要做的是从两个类别的脚本标签组中
我需要删除脚本的打开和关闭标签,但将内容保留在标签内如果是第一种类型,我仍然需要删除标签,但将路径保存在单独的表中,希望可以进一步阐明它
正如iCodez的链接很有趣地显示的那样,正则表达式不应该解析HTML,因为HTML不是一种常规语言。 而是尝试使用诸如BeautifulSoup
的解析器。 确保还安装了lxml
和html5lib
以获得最佳性能并访问所有功能。
pip install lxml html5lib beautifulsoup4
应该可以。
如果我同意不使用RegExp解析HTML的所有评论,并且还提供了我自己确信自己将处理的文档足够常规的情况,那么我自己可以沉迷于这种邪恶的做法,请尝试删除\\B
,在我的测试中匹配所有三个脚本。
顺便说一下,这个“无边界”是什么意思? 我不确定我理解您为什么插入它。 如果出于某种原因有必要我不明白,请告诉我,我们将尝试寻找另一种方法。
编辑:为了保留src内容,请尝试
(<\s*?script[\s\S]*?(?:(?:src=[\'"](.*?)[\'"])(?:[\S\s]*?))?>)([\s\S]*?)(</script>)
这对我有用,请对照您的其他样本。 考虑您的first [\\s\\S]*?
在没有“ src”属性时已经匹配了所有内容,直到>
为止,因此第二个条件只有在“ src”存在并且您要匹配其他可能的属性时才有意义。
对于傻笑,这是我完全偶然发现的一种超简单方式(作为js字符串,该字符串将被馈送到RegExp构造函数中:
'src =(= | =“)'+ yourPathHere +'[^ <] <\\ / script>'
yourPathHere的正斜杠已转义; 因此,作为纯RE,类似:
/src=(=|=")/scripts/someFolder/script.js[^<]</script>/
在尝试找出gulp流时,我在gulp任务中使用的::]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.