Выполнение основной математики в группах захвата регулярных выражений [дубликат]

Конечно, есть много таких подходов, как синхронный запрос, обещание, но из моего опыта я думаю, что вы должны использовать подход обратного вызова. Естественно, что асинхронное поведение Javascript. Итак, ваш фрагмент кода можно переписать немного иначе:

function foo() {
    var result;

    $.ajax({
        url: '...',
        success: function(response) {
            myCallback(response);
        }
    });

    return result;
}

function myCallback(response) {
    // Does something.
}
2
задан Ansgar Wiechers 27 January 2015 в 20:42
поделиться

2 ответа

Предполагая, что $A и $B содержат только простые строки, а не регулярные выражения, вы можете использовать оператор switch с подстановочными символами:

$path = 'c:\work\test.xml'
$A = 'AAAAA'
$B = 'BBBBB'

(Get-Content $path) | % {
  switch -wildcard ($_) {
    "*$A*"  { $_ -replace [regex]::Escape($A), $B }
    "*$B*"  { $_ -replace [regex]::Escape($B), $A }
    default { $_ }
  }
} | Set-Content $path

[regex]::Escape() гарантирует, что символы, имеющие специальное измерение в регулярных выражениях, экранируются, поэтому значения заменяются как литералы.

Если вы нацелены на что-то более продвинутое, вы можете использовать обычный замещение выражения с помощью функции обратного вызова:

$path = 'c:\work\test.xml'
$A = 'AAAAA'
$B = 'BBBBB'

$rep = @{
  $A = $B
  $B = $A
}

$callback = { $rep[$args[0].Groups[1].Value] }

$re = [regex]("({0}|{1})" -f [regex]::Escape($A), [regex]::Escape($B))

(Get-Content $path) | % {
  $re.Replace($_, $callback)
} | Set-Content $path
5
ответ дан Ansgar Wiechers 24 August 2018 в 23:01
поделиться

Это не проверено экстенсивно, но я думаю, что он должен работать:

path = c:\work\test.xml
$A = 'AAAAA'
$B = 'BBBBB'

[regex]$regex = "$A|$B"

$text = 
Get-Content $path | 
foreach {
$regex.Replace($text,{if ($args[0].value -eq $A){$B} else {$A}})
}

$text | Set-Content $path

Трудно быть уверенным, не зная точно, как выглядят данные.

1
ответ дан mjolinor 24 August 2018 в 23:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: