如何让正则匹配单行/多行括号内的process.env解构变量?
匹配TypeScript中单行/多行process.env解构变量的grep脚本修改方案
需求场景
需要在TypeScript项目中匹配所有从process.env解构的环境变量,同时兼容单行和多行的解构写法。
示例代码
File1.ts(单行解构):
const { OKTA_AUDIENCE_DOMAIN, OKTA_DOMAIN = '', OKTA_WEB_CLIENT_ID, OKTA_ISSUER: issuer = '', AUTH_TWO: ISSUE_TWO = '', } = process.env;
File2.ts(多行解构):
const { OKTA_AUDIENCE_DOMAIN, OKTA_DOMAIN = '', OKTA_WEB_CLIENT_ID, OKTA_ISSUER: issuer = '', AUTH_TWO: ISSUE_TWO = '', } = process.env;
原有脚本问题
原有命令grep -Ezo '\{[^}]*\} = process.env'仅能匹配单行解构场景,对多行解构返回空结果。原因是[^}]*无法正确处理换行符,且贪婪匹配逻辑不适用于跨多行的结构。
修改后的脚本
使用Perl兼容正则表达式(PCRE)实现跨多行匹配:
grep -Pzo '\{[\s\S]*?\} = process.env' File1.ts File2.ts
参数说明
-P:启用PCRE正则,支持更灵活的字符匹配和非贪婪模式-z:将换行符视为普通字符,避免换行中断匹配流程-o:仅输出匹配的目标内容,而非整行文本\{[\s\S]*?\}:[\s\S]匹配任意字符(包含换行),*?启用非贪婪模式,确保从第一个{匹配到最近的},避免过度匹配= process.env:精准匹配解构语句的结尾标识
验证结果
运行修改后的命令,两个文件的解构内容都会被正确匹配输出:
- File1.ts输出:
{ OKTA_AUDIENCE_DOMAIN, OKTA_DOMAIN = '', OKTA_WEB_CLIENT_ID, OKTA_ISSUER: issuer = '', AUTH_TWO: ISSUE_TWO = '', } = process.env
- File2.ts输出:
{ OKTA_AUDIENCE_DOMAIN, OKTA_DOMAIN = '', OKTA_WEB_CLIENT_ID, OKTA_ISSUER: issuer = '', AUTH_TWO: ISSUE_TWO = '', } = process.env
内容的提问来源于stack exchange,提问作者James111
相关产品推荐
相关产品推荐

