From 1d2ca509c77cbb2af0475b1319cd840f8ce9a1d0 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 6 Jul 2019 17:17:46 +0200 Subject: Split in packages --- internal/re/re.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 internal/re/re.go (limited to 'internal/re/re.go') diff --git a/internal/re/re.go b/internal/re/re.go new file mode 100644 index 0000000..b235282 --- /dev/null +++ b/internal/re/re.go @@ -0,0 +1,36 @@ +package re + +import ( + "errors" + "regexp" + "strings" +) + +var errNotRE = errors.New("not re") + +func Replace(s, r string, global bool) (string, error) { + // min: at least two separators + if len(r) < 2 { + return "", errNotRE + } + z := strings.Split(r[1:], string(r[0])) + // match // and /// + if len(z) < 2 || len(z) > 3 { + return "", errNotRE + } + re, err := regexp.Compile(z[0]) + if err != nil { + return "", err + } + i := 1 + if global { + i = -1 + } + return re.ReplaceAllStringFunc(s, func(b string) string { + if i != 0 { + i-- + return z[1] + } + return b + }), nil +} -- cgit v1.2.3