Powershell多行正则表达式以查找代码块

时间:2019-03-11 13:04:34

标签: regex powershell

我需要一个正则表达式来查找所有如下所示的代码块:

单行

export const someSingeLine: ISomeSingleLine = { //stuff };

多行

    export const constState: ISomeInterface = {

       someProperty: {//other stuff}

    };

到目前为止,我有:

Get-ChildItem -Recurse -Filter *.ts | get-content -raw | Select-String -pattern "export\s+const\s+([a-zA-Z])*:(.)*" -AllMatches | ForEach-Object { $_.Matches.Value }

递归获取每个打字稿文件:

Get-ChildItem -Recurse -Filter *.ts 

将文件读取为字符串:

get-content -raw

找到匹配项

Select-String -pattern "export\s+const\s+([a-zA-Z])*:(.)*" -AllMatches

输出找到的内容:

ForEach-Object { $_.Matches.Value }

我尝试了一些其他组合,但是我无法匹配以

结尾的整个多行代码块
  

};

更新: 发布之后...我尝试了以下操作,相信可以得到想要的结果:

Get-ChildItem -Recurse -Filter *.ts | get-content -raw | Select-String -pattern "export\s+const\s+([a-zA-Z])*:([^;])*;" -AllMatches | ForEach-Object { $_.Matches.Value }

1 个答案:

答案 0 :(得分:0)

如果要确保捕获正确数量的嵌套{}对,请使用balancing groups

$pattern = '(?sm)export const [\w:\s]+=\s?\{(?:[^{}]|(?<scopeEnter>\{)|(?<scopeLeave-scopeEnter>\}))+(?(scopeEnter)(?!))\};'
Get-ChildItem -Recurse -Filter *.ts | Get-Content -Raw |Select-String $pattern -AllMatches |ForEach-Object {$_.Matches.Value}

话虽如此,我建议对这种事情使用TypeScript解析器而不是正则表达式