Javascript Regex:如何在组中提取html标记值?

时间:2017-08-28 07:45:01

标签: javascript regex

上下文

我是正则表达式的新手(仍在练习),我试图从标签中提取script srclink href值(用于教育目的)。

给出以下html

<!-- hello -->
    <script src="1.js"></script>
    <script src="2.js"></script>
    <link rel="stylesheet" href="3.css"/>
<!-- world -->

我想要

数组:1.js2.js3.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-->

3 个答案:

答案 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'