Passing a function to Powershell's (replace) function Passing a function to Powershell's (replace) function powershell powershell

Passing a function to Powershell's (replace) function


Perhaps you are looking for Regex.Replace Method (String, MatchEvaluator). In PowerShell a script block can be used as MatchEvaluator. Inside this script block $args[0] is the current match.

$global_counter = 0$callback = {    $global_counter += 1    "string-$($args[0])-" + $global_counter}$re = [regex]"match"$re.Replace('zzz match match xxx', $callback)

Output:

zzz string-match-1 string-match-2 xxx


PowerShell does not (yet?) have support for passing a script block to the -replace operator. The only option here is to use [Regex]::Replace directly:

[Regex]::Replace($mystring, 'match', {callback})