package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?xi)(?(DEFINE)
(?<decimal>(?(int)([.][0-9]+)?|[.][0-9]+))
(?<percentage>
(100|
(?<int>([0-9]|[1-9][0-9]))? # Have integer be optional (0-100 only)
(?P>decimal) # Have decimal required when an integer is not included
)
(?<symbol>%)
)
(?<hue>
(?<int>36[0]|3[0-5][0-9]|[12][0-9][0-9]|[1-9]?[0-9])? # Have integer be optional
(?P>decimal) # Have decimal required when an integer is not included
(?<symbol>\s*deg\s*)?
)
(?<alpha>
(?(alpha),\s*(
1[.]0|
(?<int>0)? # Have integer be optional
(?P>decimal) # Have decimal required when integer is not incldue
)\s*)
)
(?<hsl>\s*(?P>hue)\s*,\s*(?P>percentage)\s*,\s*(?P>percentage)\s*)
)
hsl(?<alpha>a)?\((?P>hsl)(?P>alpha)\)`)
var str = `hsl(10, 50deg, 150%)
HSLA(50.35, .531, 10%)
HSLA(50.5deg, .531%, .9%, 1.0)`
for i, match := range re.FindAllString(str, -1) {
fmt.Println(match, "found at index", i)
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Golang, please visit: https://golang.org/pkg/regexp/