我需要在某个字符串之后从网站脚本中获取数字

时间:2019-04-24 10:26:16

标签: powershell-v2.0

我正在尝试从网站上的脚本标签中获取一定数量的数字字符串(每次重新加载时数字长度会有所不同)。但是,由于仍受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&

1 个答案:

答案 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”和数字。