mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-17 23:20:13 +01:00
🐛 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))
|
newContent = bytes.ReplaceAll(text.Tokens, []byte(keyword), []byte(replacement))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 当搜索结果中的文本元素包含大小写混合时替换失败
|
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, " ")
|
// Replace fails when search results contain mixed case in text elements https://github.com/siyuan-note/siyuan/issues/9171
|
||||||
// keyword 可能是 "foo Foo" 使用空格分隔的大小写命中情况,这里统一转换小写后去重
|
keywords := strings.Split(keyword, " ")
|
||||||
if 0 < len(keywords) {
|
// keyword 可能是 "foo Foo" 使用空格分隔的大小写命中情况,这里统一转换小写后去重
|
||||||
var lowerKeywords []string
|
if 0 < len(keywords) {
|
||||||
for _, k := range keywords {
|
var lowerKeywords []string
|
||||||
lowerKeywords = append(lowerKeywords, strings.ToLower(k))
|
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)) {
|
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)
|
typeFilter := buildTypeFilter(types)
|
||||||
boxFilter := buildBoxesFilter(boxes)
|
boxFilter := buildBoxesFilter(boxes)
|
||||||
pathFilter := buildPathsFilter(paths)
|
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)
|
blocks, matchedBlockCount, matchedRootCount = fullTextSearchByQuerySyntax(query, boxFilter, pathFilter, typeFilter, ignoreFilter, orderByClause, beforeLen, page, pageSize)
|
||||||
} else {
|
} else {
|
||||||
docMode = true // 文档全文搜索模式 https://github.com/siyuan-note/siyuan/issues/10584
|
docMode = true // 文档全文搜索模式 https://github.com/siyuan-note/siyuan/issues/10584
|
||||||
|
|
@ -1304,7 +1306,12 @@ func fullTextSearchByRegexp(exp, boxFilter, pathFilter, typeFilter, ignoreFilter
|
||||||
fieldFilter := fieldRegexp(exp)
|
fieldFilter := fieldRegexp(exp)
|
||||||
stmt := "SELECT * FROM `blocks` WHERE " + fieldFilter + " AND type IN " + typeFilter
|
stmt := "SELECT * FROM `blocks` WHERE " + fieldFilter + " AND type IN " + typeFilter
|
||||||
stmt += boxFilter + pathFilter + ignoreFilter + " " + orderBy
|
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)
|
blocks := sql.SelectBlocksRegex(stmt, regex, Conf.Search.Name, Conf.Search.Alias, Conf.Search.Memo, Conf.Search.IAL, page, pageSize)
|
||||||
ret = fromSQLBlocks(&blocks, "", beforeLen)
|
ret = fromSQLBlocks(&blocks, "", beforeLen)
|
||||||
if 1 > len(ret) {
|
if 1 > len(ret) {
|
||||||
|
|
@ -1458,7 +1465,10 @@ func highlightByRegexp(query, typeFilter, id string) (ret []string) {
|
||||||
fieldFilter := fieldRegexp(query)
|
fieldFilter := fieldRegexp(query)
|
||||||
stmt := "SELECT * FROM `blocks` WHERE " + fieldFilter + " AND type IN " + typeFilter
|
stmt := "SELECT * FROM `blocks` WHERE " + fieldFilter + " AND type IN " + typeFilter
|
||||||
stmt += " AND root_id = '" + id + "'"
|
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)
|
sqlBlocks := sql.SelectBlocksRegex(stmt, regex, Conf.Search.Name, Conf.Search.Alias, Conf.Search.Memo, Conf.Search.IAL, 1, 256)
|
||||||
for _, block := range sqlBlocks {
|
for _, block := range sqlBlocks {
|
||||||
keyword := gulu.Str.SubstringsBetween(block.Content, search.SearchMarkLeft, search.SearchMarkRight)
|
keyword := gulu.Str.SubstringsBetween(block.Content, search.SearchMarkLeft, search.SearchMarkRight)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue