From b93af1965e70bdcad464690ae3530a3d66b1720b Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Wed, 1 Mar 2023 09:17:05 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E6=AD=A3=E5=88=99=E8=A1=A8=E8=BE=BE?= =?UTF-8?q?=E5=BC=8F=E6=90=9C=E7=B4=A2=E5=A4=B1=E6=95=88=20Fix=20https://g?= =?UTF-8?q?ithub.com/siyuan-note/siyuan/issues/7529?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/search.go | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/kernel/model/search.go b/kernel/model/search.go index 25b4fbf15..1c3b70915 100644 --- a/kernel/model/search.go +++ b/kernel/model/search.go @@ -209,6 +209,9 @@ func FindReplace(keyword, replacement string, ids []string, method int) (err err return } + r, _ := regexp.Compile(keyword) + escapedKey := util.EscapeHTML(keyword) + escapedR, _ := regexp.Compile(escapedKey) ids = gulu.Str.RemoveDuplicatedElem(ids) var renameRoots []*ast.Node renameRootTitles := map[string]string{} @@ -238,7 +241,6 @@ func FindReplace(keyword, replacement string, ids []string, method int) (err err renameRoots = append(renameRoots, n) } } else if 3 == method { - r, _ := regexp.Compile(keyword) if nil != r && r.MatchString(title) { renameRootTitles[n.ID] = r.ReplaceAllString(title, replacement) renameRoots = append(renameRoots, n) @@ -250,22 +252,19 @@ func FindReplace(keyword, replacement string, ids []string, method int) (err err n.Tokens = bytes.ReplaceAll(n.Tokens, []byte(keyword), []byte(replacement)) } } else if 3 == method { - r, _ := regexp.Compile(keyword) if nil != r && r.MatchString(string(n.Tokens)) { n.Tokens = []byte(r.ReplaceAllString(string(n.Tokens), replacement)) } } case ast.NodeTextMark: if n.IsTextMarkType("code") { - escapedKey := util.EscapeHTML(keyword) if 0 == method { if strings.Contains(n.TextMarkTextContent, escapedKey) { n.TextMarkTextContent = strings.ReplaceAll(n.TextMarkTextContent, escapedKey, replacement) } } else if 3 == method { - r, _ := regexp.Compile(escapedKey) - if nil != r && r.MatchString(n.TextMarkTextContent) { - n.TextMarkTextContent = r.ReplaceAllString(n.TextMarkTextContent, replacement) + if nil != escapedR && escapedR.MatchString(n.TextMarkTextContent) { + n.TextMarkTextContent = escapedR.ReplaceAllString(n.TextMarkTextContent, replacement) } } } else { @@ -274,7 +273,6 @@ func FindReplace(keyword, replacement string, ids []string, method int) (err err n.TextMarkTextContent = strings.ReplaceAll(n.TextMarkTextContent, keyword, replacement) } } else if 3 == method { - r, _ := regexp.Compile(keyword) if nil != r && r.MatchString(n.TextMarkTextContent) { n.TextMarkTextContent = r.ReplaceAllString(n.TextMarkTextContent, replacement) } @@ -298,7 +296,6 @@ func FindReplace(keyword, replacement string, ids []string, method int) (err err n.TextMarkAHref = strings.ReplaceAll(n.TextMarkAHref, keyword, replacement) } } else if 3 == method { - r, _ := regexp.Compile(keyword) if nil != r { if r.MatchString(n.TextMarkTextContent) { n.TextMarkTextContent = r.ReplaceAllString(n.TextMarkTextContent, replacement) @@ -637,7 +634,6 @@ func fullTextSearchByKeyword(query, boxFilter, pathFilter, typeFilter string, or func fullTextSearchByRegexp(exp, boxFilter, pathFilter, typeFilter, orderBy string, beforeLen int) (ret []*Block, matchedBlockCount, matchedRootCount int) { exp = gulu.Str.RemoveInvisible(exp) - exp = regexp.QuoteMeta(exp) fieldFilter := fieldRegexp(exp) stmt := "SELECT * FROM `blocks` WHERE " + fieldFilter + " AND type IN " + typeFilter