繁体   English   中英

正则表达式以匹配python中的不同脚本标签

[英]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属性的内容。 我需要做的是从两个类别的脚本标签组中

  1. 一个带有src属性的脚本,该脚本具有实际脚本的路径
  2. 第二个没有src属性的普通内联javascript

我需要删除脚本的打开和关闭标签,但将内容保留在标签内如果是第一种类型,我仍然需要删除标签,但将路径保存在单独的表中,希望可以进一步阐明它

正如iCodez的链接很有趣地显示的那样,正则表达式不应该解析HTML,因为HTML不是一种常规语言。 而是尝试使用诸如BeautifulSoup的解析器。 确保还安装了lxmlhtml5lib以获得最佳性能并访问所有功能。

pip install lxml html5lib beautifulsoup4

应该可以。

如果我同意不使用RegExp解析HTML的所有评论,并且还提供了我自己确信自己将处理的文档足够常规的情况,那么我自己可以沉迷于这种邪恶的做法,请尝试删除\\B ,在我的测试中匹配所有三个脚本。

顺便说一下,这个“无边界”是什么意思? 我不确定我理解您为什么插入它。 如果出于某种原因有必要我不明白,请告诉我,我们将尝试寻找另一种方法。

编辑:为了保留src内容,请尝试

(<\s*?script[\s\S]*?(?:(?:src=[\'"](.*?)[\'"])(?:[\S\s]*?))?>)([\s\S]*?)(</scrip‌​t>)

这对我有用,请对照您的其他样本。 考虑您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM