如何匹配脚本链接?

时间:2015-07-10 17:46:09

标签: regex powershell powershell-v1.0

在PowerShell中,我试图在<script>块上使用正则表达式,并尝试使用jQuery链接获取所有脚本标记的列表。所有变化如

<script type="text/javascript" src="..." />
<script type="text/javascript" src="..."></script>

还有不同类型的引号,如单引号或双引号。

当我匹配它时,我希望将它们全部匹配(全局),然后打印出所有脚本标记(如上所示)。到目前为止我有这个:

if (($contents -match "src=(.*jquery.*\.js)") -eq $true) {
    write-host "$($matches[1]) found at $($web.Url)/$url (CONTENTLINK)";
    write-host "";
}

但它无法正常工作。我不认为它得到所有的匹配,而且部分是打印比脚本标签更准确。我怎么能这样做?

注意:这是PowerShell 1。

1 个答案:

答案 0 :(得分:0)

使用.*是所有人首先学习正则表达式;遗憾的是它有副作用,最终导致沮丧和正则表达式操作缓慢。

  

我认为它不会得到所有的匹配,而且打印的部分比脚本标签更准确

其中一个副作用是它消耗了一切,我的意思是一切。

以下是我认为你想要的剧本

src=\x22(?=.*jquery)([^\x22]+)\x22

解释

  • src= - 未捕获的锚文本,但它是匹配的。 (在匹配[0]中找到但不匹配1
  • \x22 - "个字符的十六进制转义符。更容易使用文字正则表达式。
  • (?= ) - 展望未来。说'#34;我不想匹配,除非我找到了我的前瞻。如果找不到,它会停止比赛。
  • (?=.*jquery) .*jquery某处可能存在文本. *零次或多次,以及文字jquery。如果&#34; jquery&#34;找不到,停止处理。否则继续。
  • ([^\x22]+) - 我们知道我们将匹配内容( ),因此任何不是.引用^的字符[^\x22]会将其消耗为1或更多次+
  • \x22 - 匹配,但不要使用"的最终锚文本来完成。也是前瞻性上述.*处理的难点。

测试(不是在Powershell中但在.Net中):

enter image description here

两个结果(找到匹配项)

enter image description here