in grok.go [242:275]
func captureTypeFn[K any](re *regexp.Regexp, text string, conversionFn func(v, key string) (K, error)) (map[string]K, error) {
captures := make(map[string]K)
matches := re.FindStringSubmatch(text)
if len(matches) == 0 {
return captures, nil
}
names := re.SubexpNames()
if len(names) == 0 {
return captures, nil
}
for i, name := range names {
if len(name) == 0 {
continue
}
match := matches[i]
if len(match) == 0 {
continue
}
if conversionFn != nil {
v, err := conversionFn(string(match), name)
if err != nil {
return nil, err
}
captures[strings.ReplaceAll(name, dotSep, ".")] = v
}
}
return captures, nil
}