github.com/spi-ca/misc@v1.0.1/strutil/convention.go (about)

     1  package strutil
     2  
     3  import (
     4  	"regexp"
     5  	"strings"
     6  )
     7  
     8  var (
     9  	camelCase = regexp.MustCompile("(^[^A-Z0-9]*|[A-Z0-9]*)([A-Z0-9][^A-Z]+|$)")
    10  )
    11  
    12  // CamelToUnderscore method converts a naming convention from CamelCase to under_score.
    13  func CamelToUnderscore(s string) string {
    14  	var a []string
    15  	for _, sub := range camelCase.FindAllStringSubmatch(s, -1) {
    16  		if sub[1] != "" {
    17  			a = append(a, sub[1])
    18  		}
    19  		if sub[2] != "" {
    20  			a = append(a, sub[2])
    21  		}
    22  	}
    23  	return strings.ToLower(strings.Join(a, "_"))
    24  }