zturn
2022 年12 月 20 日 19:35
1
非JavaScript程序员,对接口不是很熟悉,所以用了正则匹配来实现哈,主要是过滤# ## ###
开头,空行结尾的段落,不知道是否有其他更好的实现,先push上来再说。
正则如下。
function getBlockContent(str, title){
return str.match(`(?<=#{1,6}[ ]*${title}[\\n])[\\s\\S]*?(?=[\\n]{2}|$)`);
}
下面这个版本是过滤两个标题间的段落
function getBlockContent(str, title){
return str.match(`\(\?<=#\{1,6\}\[ \]\*${title}\[\\n\]\)\[\\s\\S\]\*\?\(\?=\[\\n\]{2\}#\{1,6\}\[ \]\|\$\)`);
}
示例
一个简单的dataview汇总笔记内容生成表格的示例,比如说现在我有一系列这样的markdown语法笔记。
## 效果
1. First item
2. Second item
3. Third item
## 语法
```markdown
1. First item
2. Second item
3. Third item
```
我想要把同类笔记的段落汇总成表格方便查看。
则可以用dataviewjs来实现:
function getBlockContent(str, title){
return str.match(`(?<=#{1,6}[ ]*${title}[\\n])[\\s\\S]*?(?=[\\n]{2}|$)`);
}
let files = dv.pages('"Markdown/语法"');
let table = [];
for(let i of files) {
let content = await app.vault.readRaw(i.file.path);
let syntax = getBlockContent(content, "语法");
let result = getBlockContent(content, "效果");
table.push({
"file": i.file.link,
"syntax": syntax,
"result":result
})
}
dv.table(["Element", "Markdown Syntax", "Result"], table
.map(b => [b.file, b.syntax, b.result]))
显示效果如下:
搜索很久没有找到现成解决方案,希望可以帮到同样需求的人 。
4 个赞
zturn
2022 年12 月 21 日 01:32
3
文件夹路径
dv.pages() => all pages in your vault
dv.pages("#books") => all pages with tag 'books'
dv.pages('"folder"') => all pages from folder "folder"
dv.pages("#yes or -#no") => all pages with tag #yes, or which DON'T have tag #no
dv.pages('"folder" or #tag') => all pages with tag #tag, or from folder "folder"
2 个赞
班图
2022 年12 月 21 日 07:24
5
请问大神, 我想匹配最后一个---
与%%
之间的全部内容, 这个正则应该怎么写啊
---
aliases:
- 'aa
tags:
- 'bb'
---
内容
内容
%%
## 引用
zturn
2022 年12 月 21 日 11:15
6
可以试试。
`(?<=[\\n]-{3}[\\n])[\\s\\S]*?(?=[\\n]%{2}[\\n])`
2 个赞
班图
2022 年12 月 21 日 12:49
7
成功了, 非常感谢!
我这里用yaml区的别名作为首列, 我想给它加一个链接. 这样我点一下就能跳转到源文件应该怎么实现呢? 还有就是内容这列有办法把那一点去掉吗?
```dataviewjs
function getBlockContent(str){
return str.match(`(?<=[\\n]-{3}[\\n])[\\s\\S]*?(?=[\\n]%{2}[\\n])`);
}
let files = dv.pages("#名词解释");
let table = [];
for(let i of files) {
let content = await app.vault.readRaw(i.file.path);
let result = getBlockContent(content);
table.push({
"file": i.file.link,
"name": i.file.frontmatter.aliases[0],
"result":result
})
}
dv.table(["名词", "解释"], table
.map(b => [b.name, b.result]))
zturn
2022 年12 月 22 日 14:08
8
班图:
"file": i.file.link
这个就是可以跳转的链接。
用具体内容跳转链接可以试试这样:
"name": `[[${i.file.path}|${i.file.frontmatter.aliases[0]}]]`
去掉点可以这样。
"result":result.toString()
2 个赞
liux
(calmwaves)
2023 年1 月 16 日 15:31
10
请问我的文件夹里有些文件没有该标题,能不能排除掉这些文件呀,简单来说就是把table里值为空的那一行去掉
RedOn
2024 年1 月 1 日 05:56
12
if (syntax && syntax[0].trim() !== '') { // 检查语法内容是否不为空
table.push({ "file": i.file.link, "syntax": syntax, "result": result });
}
在table push之前添加条件
1 个赞