我正在尝试从网站上的脚本标签中获取一定数量的数字字符串(每次重新加载时数字长度会有所不同)。但是,由于仍受PowerShell v2的困扰,因此我无法尽力解决该问题,因此无法对其进行更高的升级。
我已经设法通过在IE中加载网站并通过标记名称“ script”来获取元素来获取完整脚本,并且我尝试尝试使用一些正则表达式来查找字符串,但无法完全理解它
我还尝试从脚本的正面和背面剥离字符,那是我意识到数字长度每次都会改变的原因。
脚本的一部分是:
var value = document.wizform.selActivities.options[document.wizform.selActivities.selectedIndex].value;
if (value == "Terminate") {
if (confirm("Are you sure you want to terminate the selected business process(es)?")) {
document.wizform.action = "./Page?next=page.actionrpt&action=terminate&pos=0&1006999619";
javascript:document.wizform.submit();
}
} else if (value == "TerminateAndRestart") {
if (confirm("Are you sure you want to terminate and restart the selected business process(es)?")) {
document.wizform.action = "./Page?next=page.actionrpt&action=terminateandrestart&pos=0&237893352";
javascript:document.wizform.submit();
}
}
我要捕捉的部分是这里的数字
document.wizform.action = "./Page?next=page.actionrpt&action=terminateandrestart&pos=0&237893352";
到目前为止,我拥有的PowerShell代码是
$checkbox = $ie.Document.getElementsByTagName("script") | Where-Object {
$_.outerHTML -like "*./Page?next=page.actionrpt&action=terminate*"
} # | select -Expand outerHTML
$content = $checkbox
$matches = [regex]::Matches($content, '".\action=terminate\.([^"]+)')
$matches | ForEach-Object {
$_.Groups[1].Value
}
我想要的是PowerShell仅将数字作为变量,因此在上面的示例中,我希望能够有0&237893352
或只有237893352
(因为注释没有进行更改,因此我可以在需要后再添加0&
。
答案 0 :(得分:0)
使用肯定的后置断言来匹配您感兴趣的特定操作:
$re = '(?<=action=terminateandrestart&pos=)0&\d+'
$content |
Select-String -Pattern $re |
Select-Object -Expand Matches |
Select-Object -Expand Value
(?<=...)
是一个正则表达式构造,称为“正向后断言”,它允许匹配以特定字符串开头的内容(在您的情况下为“ action = terminateandrestart&pos =“),而无需将该字符串作为返回值的一部分比赛。这样,您可以查找字符串“ action = terminateandrestart&pos =“,后跟“ 0”和一个或多个数字(\d+
),而仅返回“ 0”和数字。