上下文
我是正则表达式的新手(仍在练习),我试图从标签中提取script src
或link href
值(用于教育目的)。
给出以下html
<!-- hello -->
<script src="1.js"></script>
<script src="2.js"></script>
<link rel="stylesheet" href="3.css"/>
<!-- world -->
我想要
数组:1.js
,2.js
和3.css
我已尝试
这是我到目前为止所做的正则表达式,但是meh。
/(?:<!-- hello -->\s*?)([\s\S]*?)(?:\s?<!-- world -->)/gmi
当然,我必须用更好的东西替换[\s\S]*?
,但我已经尝试了很多组合,但没有一个能够奏效。
问候。
更新
只应匹配<!-- xxx --><!-- xxx-->
代码之间的脚本。
以下内容不匹配:
<!-- foo-->
<script src="4.js"></script>
<script src="5.js"></script>
<link rel="stylesheet" href="6.css"/>
<!-- bar-->
答案 0 :(得分:1)
使用正则表达式
<!-- hello -->([\S\s]+)<!-- world -->
提取第一组中的有效字符串,请参阅regex demo
然后你可以使用正则表达式
<(?:script src.*|link.*href)="(\w+\.\w+)
所有比赛都在第1组
请参阅regex demo
答案 1 :(得分:1)
因此,正如WiktorStribiżew所提到的,它应该分步完成,因为JS不可能直接获得结果。
首先,您必须在<!-- xxx --><!-- xxx -->
代码之间抓取元素,然后对结果使用全局搜索。
感谢WiktorStribiżew!
答案 2 :(得分:0)
如果你有像
这样的元素<name attribute=value attribute="value" attribute='value'>
这个正则表达式可用于连续查找每个属性名称和值
(\S+)=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?
申请:
<a href=test.html class=xyz>
<a href="test.html" class="xyz">
<a href='test.html' class="xyz">
它会产生:
'href' => 'test.html'
'class' => 'xyz'