如何从分支名称字符串中仅提取ABV/ASD/WSX开头的工单编号?
精准提取工单编号的正则表达式优化
问题背景
你当前的流水线命令提取工单编号时,会意外包含分支前缀(比如fix/),需要仅提取ABV-XXX、ASD-XXX或WSX-XXX格式的纯工单编号(XXX为2-6位数字)。
原流水线命令
- TICKET_NAME="$(echo $BRANCH_NAME | sed -E 's~^(.*/){0,1}((ABV|ASD|WSX)-[0-9]{2,6})-.*~\2~I')"
测试用分支名称示例
fix/ABV-123-test-version ABV-4233-test-another-thing feature/-ASD-my-feature
原命令的问题
原正则里的^(.*/){0,1}会匹配分支开头的路径前缀(如fix/),并将前缀与工单编号一起纳入捕获范围,导致提取结果包含多余内容。
修正后的命令
- TICKET_NAME="$(echo $BRANCH_NAME | sed -E 's~.*\b((ABV|ASD|WSX)-[0-9]{2,6})\b.*~\1~I')"
优化说明
.*直接匹配编号前的所有内容(不管是路径前缀还是其他字符),直接跳过\b是单词边界,确保捕获的是完整的工单编号,避免与前后字符粘连- 捕获组
\1仅提取符合[ABV/ASD/WSX]-[2-6位数字]格式的核心部分 -I参数保持大小写不敏感匹配,若不需要可直接移除
特殊场景兼容
如果需要兼容像feature/-ASD-my-feature这种工单编号前多了单个-的分支,可以使用以下版本:
- TICKET_NAME="$(echo $BRANCH_NAME | sed -E 's~.*\b-?((ABV|ASD|WSX)-[0-9]{2,6})\b.*~\1~I')"
该版本会自动跳过编号前的单个-,提取出标准格式的工单编号,是否启用可根据实际业务需求决定。
内容的提问来源于stack exchange,提问作者Crocsx
相关产品推荐
相关产品推荐

