32 lines
489 B
Go
32 lines
489 B
Go
|
package myutils
|
||
|
|
||
|
import "regexp"
|
||
|
|
||
|
var cropRgx *regexp.Regexp
|
||
|
|
||
|
// StrCrop crops a string like you want in blog previews
|
||
|
func StrCrop(str string, length int) string {
|
||
|
if len(str) <= length {
|
||
|
return str
|
||
|
}
|
||
|
|
||
|
if cropRgx == nil {
|
||
|
cropRgx = regexp.MustCompile(`[\s,.-]`)
|
||
|
}
|
||
|
|
||
|
var (
|
||
|
lastStop int
|
||
|
runeStr = []rune(str)
|
||
|
)
|
||
|
for i, r := range runeStr {
|
||
|
if cropRgx.MatchString(string(r)) {
|
||
|
lastStop = i
|
||
|
}
|
||
|
if i >= length {
|
||
|
return string(runeStr[:lastStop])
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return str
|
||
|
}
|