98 lines
2.2 KiB
Go
98 lines
2.2 KiB
Go
/*
|
|
Copyright 2018 The KubeSphere Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package stringutils
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
"unicode/utf8"
|
|
|
|
"github.com/asaskevich/govalidator"
|
|
)
|
|
|
|
const ansi = "[\u001B\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[a-zA-Z\\d]*)*)?\u0007)|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PRZcf-ntqry=><~]))"
|
|
|
|
var re = regexp.MustCompile(ansi)
|
|
|
|
// Creates an slice of slice values not included in the other given slice.
|
|
func Diff(base, exclude []string) (result []string) {
|
|
excludeMap := make(map[string]bool)
|
|
for _, s := range exclude {
|
|
excludeMap[s] = true
|
|
}
|
|
for _, s := range base {
|
|
if !excludeMap[s] {
|
|
result = append(result, s)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func Unique(ss []string) (result []string) {
|
|
smap := make(map[string]bool)
|
|
for _, s := range ss {
|
|
smap[s] = true
|
|
}
|
|
for s := range smap {
|
|
result = append(result, s)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func CamelCaseToUnderscore(str string) string {
|
|
return govalidator.CamelCaseToUnderscore(str)
|
|
}
|
|
|
|
func UnderscoreToCamelCase(str string) string {
|
|
return govalidator.UnderscoreToCamelCase(str)
|
|
}
|
|
|
|
func FindString(array []string, str string) int {
|
|
for index, s := range array {
|
|
if str == s {
|
|
return index
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
func StringIn(str string, array []string) bool {
|
|
return FindString(array, str) > -1
|
|
}
|
|
|
|
func Reverse(s string) string {
|
|
size := len(s)
|
|
buf := make([]byte, size)
|
|
for start := 0; start < size; {
|
|
r, n := utf8.DecodeRuneInString(s[start:])
|
|
start += n
|
|
utf8.EncodeRune(buf[size-start:], r)
|
|
}
|
|
return string(buf)
|
|
}
|
|
|
|
func Split(str string, sep string) []string {
|
|
if str == "" {
|
|
return nil
|
|
}
|
|
return strings.Split(str, sep)
|
|
}
|
|
|
|
func StripAnsi(str string) string {
|
|
return re.ReplaceAllString(str, "")
|
|
}
|