在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。
答案 0 :(得分:0)
使用.*
是所有人首先学习正则表达式;遗憾的是它有副作用,最终导致沮丧和正则表达式操作缓慢。
我认为它不会得到所有的匹配,而且打印的部分比脚本标签更准确
其中一个副作用是它消耗了一切,我的意思是一切。
以下是我认为你想要的剧本
src=\x22(?=.*jquery)([^\x22]+)\x22
解释
src=
- 未捕获的锚文本,但它是匹配的。 (在匹配[0]中找到但不匹配1 )\x22
- "
个字符的十六进制转义符。更容易使用文字正则表达式。(?= )
- 展望未来。说'#34;我不想匹配,除非我找到了我的前瞻。如果找不到,它会停止比赛。(?=.*jquery)
.*jquery
某处可能存在文本.
*
零次或多次,以及文字jquery。如果&#34; jquery&#34;找不到,停止处理。否则继续。([^\x22]+)
- 我们知道我们将匹配内容( )
,因此任何不是.
引用^
的字符[^\x22]
会将其消耗为1或更多次+
。\x22
- 匹配,但不要使用"
的最终锚文本来完成。也是前瞻性上述.*
处理的难点。 测试(不是在Powershell中但在.Net中):
两个结果(找到匹配项)