x
This commit is contained in:
+54
-24
@@ -40,7 +40,8 @@ func init() {
|
||||
}
|
||||
}
|
||||
|
||||
func ConvertRegex(input string) string {
|
||||
func ConvertRegex(input string) (string, int) {
|
||||
count := strings.Count(input, "%s")
|
||||
// 定义要转义的字符集合
|
||||
escapeSet := []string{"\\", "[", "]", "(", ")", "{", "}", ".", "*", "+", "?", "^", "$", "|"}
|
||||
|
||||
@@ -57,21 +58,37 @@ func ConvertRegex(input string) string {
|
||||
replaced := strings.ReplaceAll(input, pattern, replaceStr)
|
||||
|
||||
// 返回转换结果和是否大写的标记
|
||||
return replaced
|
||||
return replaced, count
|
||||
}
|
||||
|
||||
// \[emoji=[0-9A-Z]{4}\]
|
||||
func ReplaceToEmojis(str string, pattern string) string {
|
||||
format := pattern
|
||||
pattern = ConvertRegex(pattern)
|
||||
str = regexp.MustCompile("[0-9]"+pattern+pattern).ReplaceAllStringFunc(str, func(s string) string {
|
||||
if !strings.EqualFold(strings.ToUpper(s[1:]), strings.ToUpper(fmt.Sprintf(format+format, "FE0F", "20E3"))) { //"[emoji=FE0F][emoji=20E3]"
|
||||
return s
|
||||
}
|
||||
return fmt.Sprintf(format, fmt.Sprintf("%04X", s[0])) + s[1:]
|
||||
})
|
||||
func ReplaceToEmojis(str string, format string) string {
|
||||
pattern, count := ConvertRegex(format)
|
||||
if count == 1 {
|
||||
str = regexp.MustCompile("[0-9]"+pattern+pattern).ReplaceAllStringFunc(str, func(s string) string {
|
||||
if !strings.EqualFold(strings.ToUpper(s[1:]), strings.ToUpper(fmt.Sprintf(format+format, "FE0F", "20E3"))) { //"[emoji=FE0F][emoji=20E3]"
|
||||
return s
|
||||
}
|
||||
return fmt.Sprintf(format, fmt.Sprintf("%04X", s[0])) + s[1:]
|
||||
})
|
||||
} else if count == 2 {
|
||||
str = regexp.MustCompile("[0-9]"+pattern).ReplaceAllStringFunc(str, func(s string) string {
|
||||
if !strings.EqualFold(strings.ToUpper(s[1:]), strings.ToUpper(fmt.Sprintf(format, "FE0F", "20E3"))) { //"[emoji=FE0F][emoji=20E3]"
|
||||
return s
|
||||
}
|
||||
return fmt.Sprintf(format, fmt.Sprintf("%04X", s[0]), "0000") + s[1:]
|
||||
})
|
||||
} else {
|
||||
return str
|
||||
}
|
||||
res := str
|
||||
h := func(ssr *[]string) string {
|
||||
for i := range *ssr {
|
||||
if (*ssr)[i] == "0000" {
|
||||
s := append((*ssr)[:i], (*ssr)[i+1:]...)
|
||||
ssr = &s
|
||||
}
|
||||
}
|
||||
chs := []string{}
|
||||
ch := ""
|
||||
l := 100
|
||||
@@ -89,14 +106,22 @@ func ReplaceToEmojis(str string, pattern string) string {
|
||||
}
|
||||
if ch != "" {
|
||||
chs = append(chs, ch)
|
||||
if len(lft) != 0 {
|
||||
ch = ""
|
||||
l = 100
|
||||
*ssr = lft
|
||||
lft = []string{}
|
||||
goto again
|
||||
}
|
||||
} else {
|
||||
for _, hex := range *ssr {
|
||||
r, err := HexToRune(hex)
|
||||
if err == nil {
|
||||
chs = append(chs, string([]rune{r}))
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(lft) != 0 && ch != "" {
|
||||
ch = ""
|
||||
l = 100
|
||||
*ssr = lft
|
||||
lft = []string{}
|
||||
goto again
|
||||
}
|
||||
|
||||
return strings.Join(chs, "")
|
||||
}
|
||||
sss := regexp.MustCompile(pattern).FindAllStringSubmatchIndex(str, -1)
|
||||
@@ -105,7 +130,8 @@ func ReplaceToEmojis(str string, pattern string) string {
|
||||
e := -1
|
||||
for i := range sss {
|
||||
ss := sss[i]
|
||||
a, b, c, d := ss[0], ss[1], ss[2], ss[3]
|
||||
a, b := ss[0], ss[1] //, ss[2], ss[3]
|
||||
// fmt.Println(str[a:b], str[c:d])
|
||||
|
||||
//结算
|
||||
if e != a && len(ssr) != 0 {
|
||||
@@ -117,11 +143,15 @@ func ReplaceToEmojis(str string, pattern string) string {
|
||||
}
|
||||
|
||||
ssrs = append(ssrs, str[a:b])
|
||||
// if upper {
|
||||
// ssr = append(ssr, str[c:d])
|
||||
// } else {
|
||||
ssr = append(ssr, strings.ToUpper(str[c:d]))
|
||||
// }
|
||||
k := []int{}
|
||||
for _, j := range ss[2:] {
|
||||
k = append(k, j)
|
||||
if len(k) == 2 {
|
||||
ssr = append(ssr, strings.ToUpper(str[k[0]:k[1]]))
|
||||
k = []int{}
|
||||
}
|
||||
}
|
||||
// ssr = append(ssr, strings.ToUpper(str[c:d]))
|
||||
e = b
|
||||
}
|
||||
if len(ssr) != 0 {
|
||||
|
||||
Reference in New Issue
Block a user