大家好我正在使用powershell处理构建脚本,用构建号替换一些cacheBuster值。
我已经用构建号工作正常替换了一个基本字符串。但是,当文件未更新时,它不会从svn中删除,因此我的匹配参数不再有效。
到目前为止我的代码是
JS FILE
"deps": ["app"],
"name": "app",
"urlArgs": "bust=",
"waitSeconds" : 60,
"catchError": {
"define": true
}
Powershell脚本
$path = "jsmin\config.js"
$word = "bust="
$replacement = $build
$text = get-content $path
$newText = $text -replace $word,$replacement
$newText > $path
我想要解决这个问题的方法是找一个像bust = buildnumber这样的变量,然后用buildNumber替换bust =之后的所有文本。我假设我需要一个正则表达式,但不能确定如何。
任何帮助都会很棒
答案 0 :(得分:2)
你可以试试这个:
$path = "jsmin\config.js"
$word = "bust="
$text = Get-Content $path
$text -replace ("(?<=$word)" +'(.*?)(?=")'), $build | Set-Content $path
答案 1 :(得分:0)
可能的替代方案。如果您使用的是具有Convert [To | From] -Json的PowerShell版本,则可以将Json转换为PowerShell对象,获取属性名称,检查值,更新目标并将PS对象转换回Json。
比正则表达式更详细,更慢但是一个选项。
$build=(Get-Date).ToString("yyyyMMddhhmmss")
$js = @"
{
"deps": ["app"],
"name": "app",
"urlArgs": "bust=",
"waitSeconds" : 60,
"catchError": {
"define": true
}
}
"@ | ConvertFrom-Json
$pn = ($js | Get-Member -MemberType *Property).Name
$pn | % {
if($js.$PSItem -match "^bust=")
{
$js.$PSItem="bust=$build"
}
}
$js | ConvertTo-Json # > "config.js"