I'm am attempting to parse lines of Helm templates. I run into issues when I have value declarations side-by-side on the same line.
For example, the line image: "{{ $.Values.image.repository }}:{{ $.Values.image.tag }}"
returns one big match as opposed to two matches within the brackets.
I have tried using (\-)?( )?(.*):( )\{\{( )(\$)?.Values.*\}\}
.
I'd like to get both value instances instead of one large instance.
I'm guessing that maybe you might want to write an expression that'd look somewhat similar to:
\s*{{\s*\$?\.Values([^}]*)?\s*}}
package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?m)\s*{{\s*\$?\.Values([^}]*)?\s*}}`)
var str = `image: "{{ $.Values.image.repository }}:{{ $.Values.image.tag }}`
for i, match := range re.FindAllString(str, -1) {
fmt.Println(match, "found at index", i)
}
}
If you wish to explore/simplify/modify the expression, it's been explained on the top right panel of regex101.com. If you'd like, you can also watch in this link, how it would match against some sample inputs.
jex.im visualizes regular expressions: