我需要匹配不同的脚本标签 例如像这样
<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属性的内容。我需要做的是从一组两个类别的脚本标签
我需要删除脚本开始和结束标记,但保留标记内的内容 如果它的第一个类型我仍然需要删除标签,但保持路径在一个单独的表中 希望能更明确地澄清它
答案 0 :(得分:3)
作为iCodez&#39; link如此有趣地表明,HTML不应该被正则表达式解析,因为HTML不是常规语言。相反,请尝试使用BeautifulSoup
之类的解析器。请务必同时安装lxml
和html5lib
以获得最佳性能并访问所有功能。
pip install lxml html5lib beautifulsoup4
应该这样做。
答案 1 :(得分:1)
前提是我同意所有关于不使用RegExp解析HTML的评论,并且当我确信我将处理的文档足够规则时,我自己也沉迷于这种邪恶的做法,请尝试删除{{1}在我的测试中它匹配所有三个脚本。
顺便说一下,这个“非边界”是什么?我不确定我理解你插入它的原因。如果由于某些原因我没有把握,请告诉我,我们会尝试寻找另一种方式。
编辑: 为了保留src内容,请尝试
\B
这适用于我,请检查您的其他样品。
当你没有“src”属性时,请考虑你的(<\s*?script[\s\S]*?(?:(?:src=[\'"](.*?)[\'"])(?:[\S\s]*?))?>)([\s\S]*?)(</script>)
已经匹配到first [\s\S]*?
之前的所有内容,所以第二个只有“src”存在并且你想匹配其他可能的属性才有意义。
答案 2 :(得分:0)
对于咯咯笑,这是一个超级简单的方法,我通过完全意外发现(作为一个js字符串,它将被提供给RegExp构造函数:
&#39; SRC =(= | =&#34)&#39; + yourPathHere +&#39; [^&lt;]&lt; \ / script&gt;&#39;
其中yourPathHere有正斜杠转义;所以,作为一个纯粹的RE,像是:
/ SRC =(= | =&#34;)/脚本/ someFolder /的script.js [^&LT;]&LT; /脚本&GT; /
我正在使用gulp任务,而我正试图找出gulp流:[]