4

我有一个在 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

为什么会这样?

4

1 回答 1

4

有两个主要问题:

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

你可以用

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

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

请参阅去操场

于 2020-08-21T10:52:24.510 回答