Regex not matching in Go

2.2k views Asked by At

I have a regex that is not matching in Go.

However in a regex playground it's matching fine: https://regex101.com/r/VNDXcQ/2.

It's matching JS comments.

Here is the code:

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

Why could that be?

1

There are 1 answers

0
Wiktor Stribiżew On BEST ANSWER

There are two major issues:

  • You are using a regex literal as a string regex pattern. It means, you need to remove the first and last / and "move" m flag to the pattern by converting it into a (?m) inline modifier
  • You are only match the first occurrence with MatchString (since flags cannot be passed along with the regex pattern and g flag "is not supported"). You need to use FindAllString to get all matches.

You can fix that with

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

Note / is not a special character and thus needs no escaping.

See Go playground.