如何在Go中进行可选的正则表达式匹配

时间:2019-07-05 02:11:59

标签: regex go

说我有以下两种类型的字符串输入:

1) "feat: this is a feature"
2) "feat[JIRA-xxxx]: this is Jira feature

字符串包含三部分,其中feat是Type,JIRA-xxx内的[]是可选的Jira故事ID,其余部分在:之后。

我想使用单个正则表达式来匹配这三个部分,如果不存在可选文件,则应该为nil。以下是我的代码:

var re *regexp.Regexp
re = regexp.MustCompile("^(\\w*)(\\[(.*)\\])?\\:\\s(.*)$")

input := "feat[JIRA-xxxx]: this is Jira feature"
res := re.FindAllStringSubmatch(input, -1)
fmt.Print("%q", res)

我的正则表达式有问题。因为Jira ID部分是可选的,所以我必须使用()?,但是()的另一含义是返回匹配值,因此对于我的代码,它返回四个匹配项:

`feat`, `[JIRA-xxx]`, JIRA-xxx`, `this is Jira feature`

如何修改表达式,以便仅获得预期的3个匹配项?

1 个答案:

答案 0 :(得分:3)

使用?:修饰符创建一个非捕获组:

re = regexp.MustCompile("^(\\w*)(?:\\[(.*)\\])?\\:\\s(.*)$")

Run it on the playground