Use case or problem
As a writer I would like to be able to specify capture groups for queries with RegEx within them.
path:(Operations/Calendar/Daily/2022/03/2022-03-07) /Summary of topics discussed/
Example:
Ideally, “Summary of topics discussed” could be removed from the query results. and only the remaining text would be returned by the query
Proposed solution
Regex Capture groups.
Example Query
path:(Operations/Calendar/Daily/2022/03/2022-03-07) /Summary of topics discussed((.|\n)*)-/
This slight modification would match only the text in the capture group. Alternatively a named, capture group could be returned somehow.
Current workaround (optional)
Just living with the annoyance.
Edit:
Issue is crossposted to [Feature Request] Regex Capture groups · Issue #8 · nothingislost/obsidian-query-control · GitHub
1 Like
If I understand you right, I think you want lookbehind assertions, not capture groups.
Lookbehind assertion: Matches “x” only if “x” is preceded by “y”. For example, /(?<=Jack)Sprat/
matches “Sprat” only if it is preceded by “Jack”. /(?<=Jack|Tom)Sprat/
matches “Sprat” only if it is preceded by “Jack” or “Tom”. However, neither “Jack” nor “Tom” is part of the match results.
— Regular expression syntax cheat sheet - JavaScript | MDN
Try (?<=Summary of topics discussed)(.|\n)*
.
You may still get more text than you want because Obsidian shows the context around search results and only offers limited control of it. In that case you might want to file a request for something like “Option to display only matching parts of regex searches” — something like the -o
/ --only-matching
option for the unix shell utility grep
.
1 Like
It kinda worked but caused other problems with nesting.
The latest dataview plugin now parses lists so I just use that to pull out the results.
let folder = '\"'+String(dv.current().file.folder)+'\"'
let pages = dv.pages(folder)
.where(b => String(b.tags).includes('Meeting'))
function myFunction(sectionLink) {
sectionLink.type = null
sectionLink.subPath = null
return sectionLink
}
let summaryList = pages.file.lists
.where(z=> z.text.includes('Summary'))
.children.map(z=> (['Summary',myFunction(z.link), z.text]))
let importantNoteList = pages.file.lists
.where(z=> z.text.includes('Important notes'))
.children.map(z=> (["Important", myFunction(z.link), z.text]))
let actionsList = pages.file.lists
.where(z=> z.text.includes('Actions'))
.children.map(z=> (['Actions', myFunction(z.link), z.text]))
dv.header(5, 'Overview')
dv.table( ['Note', 'Meeting', 'Text'] ,
summaryList
.concat(importantNoteList)
.concat(actionsList))