如何编写正则匹配PowerShell的#注释并排除<#...#>内联注释
PowerShell单行#注释匹配正则(JS/TS环境适用)
最终推荐正则
const singleLineCommentRegex = /(?<!<)#(?!>).*$/gm;
规则说明
核心逻辑通过负向断言过滤PowerShell块注释标记,实现逻辑极简:
(?<!<):负向后行断言,确保匹配的#前面不是<,直接排除块注释起始标记<#(?!>):负向前瞻断言,确保匹配的#后面不是>,直接排除块注释结束标记#>.*$:匹配#之后到当前行尾的所有内容- 修饰符
gm开启全局匹配、多行模式,适配逐行解析需求
覆盖&排除场景
- 正常匹配场景:
- 整行注释:
# 示例整行注释 - 代码后带空格的注释:
Get-Process # 查看当前运行进程列表 - 代码后无空格紧随的注释:
$totalCount=10#给统计变量赋初始值
- 整行注释:
- 自动排除场景:
- 整行块注释:
<# 这是整行块注释内容 #> - 行内内联块注释:
Write-Output <# 临时注释掉的测试参数 -Path ./test #> -Path ./prod - 所有紧邻
</>的#标记都会被排除
- 整行块注释:
边界说明
该实现优先保证逻辑简单,符合可接受少量边界异常的要求:仅不兼容字符串字面量中包含#的场景,比如Write-Host "内容里带#的字符串"中的#会被误识别为注释,如需兼容该场景需要额外增加字符串匹配过滤逻辑,复杂度会大幅提升,不符合当前需求的优先级设定。
内容的提问来源于stack exchange,提问作者U. Bulle
相关产品推荐
相关产品推荐

