正则表达式在 Go 中不匹配

Regex not matching in Go

我有一个在 Go 中不匹配的正则表达式。

然而在正则表达式游乐场中它匹配良好:https://regex101.com/r/VNDXcQ/2.

匹配JS注释。

代码如下:

comment := "// fallback response. For more information contact support"
re := regexp.MustCompile(`/\/\*[\s\S]*?\*\/|([^\:]|^)\/\/.*$/gm`)
matches := re.MatchString(comment)
fmt.Println(matches) // false

为什么会这样?

主要有两个问题:

  • 您正在使用正则表达式文字作为字符串正则表达式模式。这意味着,您需要通过将其转换为 (?m) 内联修饰符
  • 来删除第一个和最后一个 / 和“移动” m 标志到模式
  • 您只匹配第一次出现的 MatchString(因为标志不能与正则表达式模式一起传递并且 g 标志“不受支持”)。您需要使用 FindAllString 来获取所有匹配项。

你可以用

解决这个问题
re := regexp.MustCompile(`(?m)/\*[\s\S]*?\*/|([^\:]|^)//.*`)
matches := re.FindAllString(comment, -1)

注意 / 不是特殊字符,因此不需要转义。

参见Go playground