From 5be556a4cff04e2ba4ffca92dbf725e2ef56da28 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Tue, 17 Dec 2019 15:31:00 -0700 Subject: [PATCH] case insenstive regexp search --- notes/search.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/notes/search.go b/notes/search.go index 4651c62..543866b 100755 --- a/notes/search.go +++ b/notes/search.go @@ -2,17 +2,21 @@ package notes import ( "bufio" - "bytes" "local/notes-server/filetree" "log" "os" "path" "path/filepath" + "regexp" ) func (n *Notes) Search(phrase string) (string, error) { + pattern, err := regexp.Compile("(?i)" + phrase) + if err != nil { + return "", err + } files := filetree.NewFiles() - err := filepath.Walk(n.root, + err = filepath.Walk(n.root, func(walked string, info os.FileInfo, err error) error { if err != nil { return err @@ -23,7 +27,7 @@ func (n *Notes) Search(phrase string) (string, error) { if size := info.Size(); size < 1 || size > (5*1024*1024) { return nil } - ok, err := grepFile(walked, []byte(phrase)) + ok, err := grepFile(walked, pattern) if err != nil && err.Error() == "bufio.Scanner: token too long" { err = nil } @@ -40,7 +44,7 @@ func (n *Notes) Search(phrase string) (string, error) { return filetree.Paths(*files).List(true), err } -func grepFile(file string, phrase []byte) (bool, error) { +func grepFile(file string, pattern *regexp.Regexp) (bool, error) { f, err := os.Open(file) if err != nil { return false, err @@ -48,7 +52,7 @@ func grepFile(file string, phrase []byte) (bool, error) { defer f.Close() scanner := bufio.NewScanner(f) for scanner.Scan() { - if bytes.Contains(scanner.Bytes(), phrase) { + if pattern.Match(scanner.Bytes()) { return true, scanner.Err() } }