Files

56 lines
1.0 KiB
Go
Raw Permalink Normal View History

package activewindow
import (
"regexp"
"strings"
)
func matchKeyword(text string, keywords []string) string {
if text == "" {
return ""
}
lower := strings.ToLower(text)
for _, kw := range keywords {
trimmed := strings.TrimSpace(kw)
if trimmed == "" {
continue
}
if strings.HasPrefix(trimmed, "/") {
re, ok := parseRegexKeyword(trimmed)
if ok && re.MatchString(text) {
return kw
}
} else {
if strings.Contains(lower, strings.ToLower(trimmed)) {
return kw
}
}
}
return ""
}
func parseRegexKeyword(kw string) (*regexp.Regexp, bool) {
if !strings.HasPrefix(kw, "/") {
return nil, false
}
rest := kw[1:]
lastSlash := strings.LastIndex(rest, "/")
if lastSlash < 0 {
return nil, false
}
pattern := rest[:lastSlash]
flags := rest[lastSlash+1:]
if pattern == "" {
return nil, false
}
regexStr := pattern
if strings.ContainsRune(flags, 'i') {
regexStr = "(?i)" + pattern
}
re, err := regexp.Compile(regexStr)
if err != nil {
return nil, false
}
return re, true
}