🐛 Fix find-replace for spaces https://github.com/siyuan-note/siyuan/issues/13010
Regexp compile error https://ld246.com/article/1730678393331
This commit is contained in:
parent
9c5a610160
commit
8b35367eb5
1 changed files with 23 additions and 13 deletions
|
@ -830,17 +830,19 @@ func replaceTextNode(text *ast.Node, method int, keyword string, replacement str
|
|||
newContent = bytes.ReplaceAll(text.Tokens, []byte(keyword), []byte(replacement))
|
||||
}
|
||||
} else {
|
||||
// 当搜索结果中的文本元素包含大小写混合时替换失败
|
||||
// Replace fails when search results contain mixed case in text elements https://github.com/siyuan-note/siyuan/issues/9171
|
||||
keywords := strings.Split(keyword, " ")
|
||||
// keyword 可能是 "foo Foo" 使用空格分隔的大小写命中情况,这里统一转换小写后去重
|
||||
if 0 < len(keywords) {
|
||||
var lowerKeywords []string
|
||||
for _, k := range keywords {
|
||||
lowerKeywords = append(lowerKeywords, strings.ToLower(k))
|
||||
if "" != strings.TrimSpace(keyword) {
|
||||
// 当搜索结果中的文本元素包含大小写混合时替换失败
|
||||
// Replace fails when search results contain mixed case in text elements https://github.com/siyuan-note/siyuan/issues/9171
|
||||
keywords := strings.Split(keyword, " ")
|
||||
// keyword 可能是 "foo Foo" 使用空格分隔的大小写命中情况,这里统一转换小写后去重
|
||||
if 0 < len(keywords) {
|
||||
var lowerKeywords []string
|
||||
for _, k := range keywords {
|
||||
lowerKeywords = append(lowerKeywords, strings.ToLower(k))
|
||||
}
|
||||
lowerKeywords = gulu.Str.RemoveDuplicatedElem(lowerKeywords)
|
||||
keyword = strings.Join(lowerKeywords, " ")
|
||||
}
|
||||
lowerKeywords = gulu.Str.RemoveDuplicatedElem(lowerKeywords)
|
||||
keyword = strings.Join(lowerKeywords, " ")
|
||||
}
|
||||
|
||||
if bytes.Contains(bytes.ToLower(text.Tokens), []byte(keyword)) {
|
||||
|
@ -945,7 +947,7 @@ func FullTextSearchBlock(query string, boxes, paths []string, types map[string]b
|
|||
typeFilter := buildTypeFilter(types)
|
||||
boxFilter := buildBoxesFilter(boxes)
|
||||
pathFilter := buildPathsFilter(paths)
|
||||
if 2 > len(strings.Split(query, " ")) {
|
||||
if 2 > len(strings.Split(strings.TrimSpace(query), " ")) {
|
||||
blocks, matchedBlockCount, matchedRootCount = fullTextSearchByQuerySyntax(query, boxFilter, pathFilter, typeFilter, ignoreFilter, orderByClause, beforeLen, page, pageSize)
|
||||
} else {
|
||||
docMode = true // 文档全文搜索模式 https://github.com/siyuan-note/siyuan/issues/10584
|
||||
|
@ -1304,7 +1306,12 @@ func fullTextSearchByRegexp(exp, boxFilter, pathFilter, typeFilter, ignoreFilter
|
|||
fieldFilter := fieldRegexp(exp)
|
||||
stmt := "SELECT * FROM `blocks` WHERE " + fieldFilter + " AND type IN " + typeFilter
|
||||
stmt += boxFilter + pathFilter + ignoreFilter + " " + orderBy
|
||||
regex := regexp.MustCompile(exp)
|
||||
regex, err := regexp.Compile(exp)
|
||||
if nil != err {
|
||||
util.PushErrMsg(err.Error(), 5000)
|
||||
return
|
||||
}
|
||||
|
||||
blocks := sql.SelectBlocksRegex(stmt, regex, Conf.Search.Name, Conf.Search.Alias, Conf.Search.Memo, Conf.Search.IAL, page, pageSize)
|
||||
ret = fromSQLBlocks(&blocks, "", beforeLen)
|
||||
if 1 > len(ret) {
|
||||
|
@ -1458,7 +1465,10 @@ func highlightByRegexp(query, typeFilter, id string) (ret []string) {
|
|||
fieldFilter := fieldRegexp(query)
|
||||
stmt := "SELECT * FROM `blocks` WHERE " + fieldFilter + " AND type IN " + typeFilter
|
||||
stmt += " AND root_id = '" + id + "'"
|
||||
regex := regexp.MustCompile(query)
|
||||
regex, _ := regexp.Compile(query)
|
||||
if nil == regex {
|
||||
return
|
||||
}
|
||||
sqlBlocks := sql.SelectBlocksRegex(stmt, regex, Conf.Search.Name, Conf.Search.Alias, Conf.Search.Memo, Conf.Search.IAL, 1, 256)
|
||||
for _, block := range sqlBlocks {
|
||||
keyword := gulu.Str.SubstringsBetween(block.Content, search.SearchMarkLeft, search.SearchMarkRight)
|
||||
|
|
Loading…
Add table
Reference in a new issue