mirror of https://github.com/gobeam/stringy.git
Snakecase, Kebabcase, Camelcase added
This commit is contained in:
commit
511fa1152a
|
@ -0,0 +1,83 @@
|
|||
# directory structure
|
||||
bin/*
|
||||
pkg/*
|
||||
!.gitkeep
|
||||
|
||||
# goop - go package manager
|
||||
.vendor
|
||||
.vendor/*
|
||||
vendor/*
|
||||
example/vendor/*
|
||||
|
||||
|
||||
|
||||
# Compiled Object files, Static and Dynamic libs (Shared Objects)
|
||||
*.o
|
||||
*.a
|
||||
*.so
|
||||
|
||||
# Folders
|
||||
_obj
|
||||
_test
|
||||
|
||||
# Architecture specific extensions/prefixes
|
||||
*.[568vq]
|
||||
[568vq].out
|
||||
|
||||
*.cgo1.go
|
||||
*.cgo2.c
|
||||
_cgo_defun.c
|
||||
_cgo_gotypes.go
|
||||
_cgo_export.*
|
||||
|
||||
_testmain.go
|
||||
|
||||
*.exe
|
||||
*.test
|
||||
*.prof
|
||||
|
||||
|
||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm
|
||||
|
||||
/*.iml
|
||||
|
||||
## Directory-based project format:
|
||||
.idea/
|
||||
|
||||
## File-based project format:
|
||||
*.ipr
|
||||
*.iws
|
||||
|
||||
## Plugin-specific files:
|
||||
|
||||
# IntelliJ
|
||||
out/
|
||||
|
||||
|
||||
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
private.pem
|
||||
public.pem
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear on external disk
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
|
||||
tmp/*
|
||||
config/config.ini
|
||||
main
|
||||
gin-bin
|
|
@ -0,0 +1,35 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
. "github.com/gobeam/string-manipulation"
|
||||
)
|
||||
|
||||
|
||||
func main() {
|
||||
//str := New("HelloMyName")
|
||||
//fmt.Println(str.Between("hello","name").ToUpper())
|
||||
|
||||
//teaseString := New("Hello My name is Roshan.")
|
||||
//fmt.Println(teaseString.Tease(100,"..."))
|
||||
|
||||
//replaceFirst := New("Hello My name is Roshan and his name is Alis.")
|
||||
//fmt.Println(replaceFirst.ReplaceFirst("name", "nau"))
|
||||
//
|
||||
//replaceLast := New("Hello My name is Roshan and his name is Alis.")
|
||||
//fmt.Println(replaceLast.ReplaceLast("name", "nau"))
|
||||
|
||||
//snakeCase := New("hey man how are you")
|
||||
//fmt.Println(snakeCase.ToSnake().ToLower())
|
||||
//camelCase := New("any__Yoko _._-_po122ΩΩΩß##s_si")
|
||||
//fmt.Println(camelCase.CamelCase())
|
||||
|
||||
kebabCase := New("any__Yoko _._-_po122ΩΩΩß##s_si")
|
||||
fmt.Println(kebabCase.KebabCase())
|
||||
|
||||
//fmt.Println(strcase.ToKebab("any__Yoko _._-_po122ΩΩΩß##s_si"))
|
||||
|
||||
//matchFirstCap := regexp.MustCompile("[-._][^a-z0-9]*")
|
||||
//rslt := matchFirstCap.ReplaceAllString("Any__ _._-_pos_si"," ")
|
||||
//fmt.Println(rslt)
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
package string_manipulation
|
||||
|
||||
const (
|
||||
First = "first"
|
||||
Last = "last"
|
||||
)
|
|
@ -0,0 +1,179 @@
|
|||
package string_manipulation
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
type input struct {
|
||||
Input string
|
||||
Result string
|
||||
Error error
|
||||
}
|
||||
|
||||
func caseHelper(input, key string,)(result string) {
|
||||
matchSpecial := regexp.MustCompile("[^-._A-Za-z0-9]*")
|
||||
input = matchSpecial.ReplaceAllString(input,"")
|
||||
matchWord := regexp.MustCompile("[-._]*[^A-Za-z0-9]")
|
||||
input = matchWord.ReplaceAllString(input,fmt.Sprintf("%s",key))
|
||||
for _, word := range strings.Fields(strings.TrimSpace(input)) {
|
||||
result += ucfirst(word)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (i *input) KebabCase() StringManipulation {
|
||||
input := getInput(*i)
|
||||
i.Result = caseHelper(input, "-")
|
||||
return i
|
||||
}
|
||||
|
||||
func ucfirst(val string) string {
|
||||
for i, v := range val {
|
||||
return string(unicode.ToUpper(v)) + val[i+1:]
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (i *input) UcFirst() string {
|
||||
input := getInput(*i)
|
||||
return ucfirst(input)
|
||||
}
|
||||
|
||||
func (i *input) LcFirst() string {
|
||||
input := getInput(*i)
|
||||
for i, v := range input {
|
||||
return string(unicode.ToUpper(v)) + input[i+1:]
|
||||
}
|
||||
return input
|
||||
}
|
||||
|
||||
func (i *input) SnakeCase() StringManipulation {
|
||||
input := getInput(*i)
|
||||
matchFirstCap := regexp.MustCompile("(.)([A-Z][a-z]+)")
|
||||
matchAllCap := regexp.MustCompile("([a-z0-9])([A-Z])")
|
||||
snake := matchFirstCap.ReplaceAllString(input, "${1}_${2}")
|
||||
snake = matchAllCap.ReplaceAllString(snake, "${1}_${2}")
|
||||
i.Result = strings.Join(strings.Fields(strings.TrimSpace(snake)), "_")
|
||||
return i
|
||||
}
|
||||
|
||||
func (i *input) CamelCase() string {
|
||||
input := getInput(*i)
|
||||
matchSpecial := regexp.MustCompile("[^-._A-Za-z0-9]*")
|
||||
input = matchSpecial.ReplaceAllString(input,"")
|
||||
matchWord := regexp.MustCompile("[-._]*[^A-Za-z0-9]")
|
||||
input = matchWord.ReplaceAllString(input," ")
|
||||
var result string
|
||||
for _, word := range strings.Fields(strings.TrimSpace(input)) {
|
||||
result += ucfirst(word)
|
||||
}
|
||||
return result
|
||||
|
||||
}
|
||||
|
||||
func (i *input) Get() string {
|
||||
return getInput(*i)
|
||||
}
|
||||
|
||||
func (i *input) Slugify() string {
|
||||
input := getInput(*i)
|
||||
return strings.ReplaceAll(input, " ", "-")
|
||||
}
|
||||
|
||||
func replaceStr(input, search, replace, types string) string {
|
||||
lcInput := strings.ToLower(input)
|
||||
lcSearch := strings.ToLower(search)
|
||||
if input == "" || !strings.Contains(lcInput, lcSearch) {
|
||||
return input
|
||||
}
|
||||
var start int
|
||||
if types == "last" {
|
||||
start = strings.LastIndex(lcInput, lcSearch)
|
||||
} else {
|
||||
start = strings.Index(lcInput, lcSearch)
|
||||
}
|
||||
end := start + len(search)
|
||||
return input[:start] + replace + input[end:]
|
||||
}
|
||||
|
||||
func (i *input) ReplaceFirst(search, replace string) string {
|
||||
input := getInput(*i)
|
||||
return replaceStr(input, search, replace, First)
|
||||
}
|
||||
|
||||
func (i *input) ReplaceLast(search, replace string) string {
|
||||
input := getInput(*i)
|
||||
return replaceStr(input, search, replace, Last)
|
||||
}
|
||||
|
||||
func (i *input) Tease(length int, indicator string) string {
|
||||
input := getInput(*i)
|
||||
if input == "" || len(input) < length {
|
||||
return input
|
||||
}
|
||||
return input[:length] + indicator
|
||||
}
|
||||
|
||||
type StringManipulation interface {
|
||||
Between(start, end string) StringManipulation
|
||||
Get() string
|
||||
ToUpper() string
|
||||
UcFirst() string
|
||||
LcFirst() string
|
||||
CamelCase() string
|
||||
SnakeCase() StringManipulation
|
||||
KebabCase() StringManipulation
|
||||
Slugify() string
|
||||
ReplaceFirst(search, replace string) string
|
||||
ReplaceLast(search, replace string) string
|
||||
ToLower() string
|
||||
Tease(length int, indicator string) string
|
||||
}
|
||||
|
||||
func New(val string) StringManipulation {
|
||||
return &input{Input: val}
|
||||
}
|
||||
|
||||
func getInput(i input) (input string) {
|
||||
if i.Result != "" {
|
||||
input = i.Result
|
||||
} else {
|
||||
input = i.Input
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (i *input) ToUpper() string {
|
||||
input := getInput(*i)
|
||||
return strings.ToUpper(input)
|
||||
}
|
||||
|
||||
func (i *input) ToLower() (result string) {
|
||||
input := getInput(*i)
|
||||
return strings.ToLower(input)
|
||||
}
|
||||
|
||||
func (i *input) Between(start, end string) StringManipulation {
|
||||
if start == "" && end == "" || i.Input == "" {
|
||||
return i
|
||||
}
|
||||
|
||||
input := strings.ToLower(i.Input)
|
||||
lcStart := strings.ToLower(start)
|
||||
lcEnd := strings.ToLower(end)
|
||||
var startIndex, endIndex int
|
||||
|
||||
if len(start) > 0 && strings.Contains(input, lcStart) {
|
||||
startIndex = len(start)
|
||||
}
|
||||
if len(end) > 0 && strings.Contains(input, lcEnd) {
|
||||
endIndex = strings.Index(input, lcEnd)
|
||||
} else if len(input) > 0 {
|
||||
endIndex = len(input)
|
||||
}
|
||||
i.Result = i.Input[startIndex:endIndex]
|
||||
return i
|
||||
}
|
Loading…
Reference in New Issue