Skip to content

Instantly share code, notes, and snippets.

@erikdubbelboer
Created August 27, 2019 10:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save erikdubbelboer/c52122327b5a7a883ddcf9dc331a5d6d to your computer and use it in GitHub Desktop.
Save erikdubbelboer/c52122327b5a7a883ddcf9dc331a5d6d to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"regexp"
"strings"
)
var (
matchBeforeCap = regexp.MustCompile("([a-z])([A-Z])")
matchAfterCap = regexp.MustCompile("([^_])([A-Z][a-rt-z])")
)
// ToSnakeCase to to_snake_case
func ToSnakeCase(str string) string {
str = matchBeforeCap.ReplaceAllString(str, "${1}_${2}")
str = matchAfterCap.ReplaceAllString(str, "${1}_${2}")
return strings.ToLower(str)
}
func main() {
cases := map[string]string{
"ToSnakeCase": "to_snake_case",
"TimeSPALoad": "time_spa_load",
"TTI": "tti",
"CPUs": "cpus",
"Action": "action",
"SiteID": "site_id",
}
for c, e := range cases {
if g := ToSnakeCase(c); g != e {
fmt.Printf("ToSnakeCase(%q) should be %q but got %q\n", c, e, g)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment