我需要一个正则表达式来查找所有如下所示的代码块:
单行
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 }
答案 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解析器而不是正则表达式