将 JavaScript "new RegExp"转换为 PowerShell [regex]::new()



如何在powershell中实现以下javascript代码片段?

String.prototype.regexCount = function (pattern) {
if (pattern.flags.indexOf("g") < 0) {
pattern = new RegExp(pattern.source, pattern.flags + "g");
}
return (this.match(pattern) || []).length;
};

我想大概是这样的:

$regexCount = { 
param(
$pattern
)
# ??????
if ($pattern.flags.indexOf("g") -lt 0) {
# ????
# $pattern = new RegExp(pattern.source, pattern.flags + "g");
$pattern = [regex]::new($pattern)
}
# ????
return ($this.match($pattern) || []).length;
}

我几乎将整个脚本转换为powershell,除了这一小块代码…实际上,当javascript开始使用正则表达式对象创建lambda函数时,我有点无能为力…

例如string.prototype.somename的意义是什么?难道你不把lambda保存为任意变量名吗?

使用Update-TypeData,为.NET字符串类型(System.String)创建一个类型级ScriptMethodETS成员:

Update-TypeData -TypeName System.String -MemberName RegexCount -MemberType ScriptMethod  -Value {
param([regex] $Regex)
$Regex.Matches($this).Count
}

现在您可以在任何字符串实例上调用.RegexCount()方法,类似于JavaScript代码所做的。

样本叫:

'foo'.RegexCount('.') # -> 3

也就是说,在输入字符串中找到了3个匹配的regex.

最新更新