【求助】统计笔记下一级标题内容(论坛搜索也没找到确切的答案)

我的想法是这样的, 一个笔记只存在一个一级标题, 所以想将一级标题作为笔记的主旨, 如果文件多了的话, 这样统计的时候就能大概明白某个笔记写的什么.

汇总某个文件夹中的所有笔记, 以文件名, 一级标题(即主旨), 编辑时间为表头. 方便后续浏览

这几天在中文及英文论坛, 都找过相关话题, 一直没找到确切答案, 包括newbing, 所以不得不来求助, 希望能给予帮助指点.

大概有个办法, Frontmatter 的title可以统计, 但是不想用这个;或者一级标题里加一个特定的标签,通过标签读取行

代码完全不懂,请各位能不吝赐教, 谢谢!

在yaml中自定义一个字段用来写总结就好了。
然后用Dataview就可以列出来了。

看来还是得在yaml中总结, 那我知道怎么弄了.
谢谢

搜 “dataview + 标题 / heading” 其实还是有不少资料的, 比如这个帖子 自用dataviewjs定位到一级标题并自定义生成 passage# head1/2 | display 代码 - 经验分享

关键是需要 dv.io.load 拿到笔记全文, 然后里面啥都能提取

```dataviewjs
const pages = dv.pages('"path/to/subfolder"');

const result = [];

for (const page of pages) {
	const content = await dv.io.load(page.file.path);
	const regex = /^# (.+)$/gm;
	let match;
	const h1_headings = [];
	while ((match = regex.exec(content)) !== null) {
		h1_headings.push(match[1].trim());
	}
	result.push( [
		page.file.link,
		h1_headings[0] || '(h1 title not found)'
	] )
}

console.log(result);
dv.table(['note', 'heading'], result);
```

好, 谢谢, 我先试下.
今天我也刚好用newbing得到了预期结果

const folderPath = "200-Page"; // 替换为你需要搜索的文件夹路径

// 获取指定文件夹中的所有文件,并按文件名排序
let files = dv.pages(`"${folderPath}"`).sort(p => p.file.name, 'asc');

// 初始化一个数组来存储表格数据
let tableData = [];

// 使用 Promise.all 并行读取所有文件内容
let contents = await Promise.all(files.map(async f => {
    let content = await app.vault.readRaw(f.file.path);
    // 排除代码块中的注释
    let inCodeBlock = false;
    return content.split('\n').filter(line => {
        if (line.trim().startsWith("```")) {
            inCodeBlock = !inCodeBlock;
            return false;
        }
        return !inCodeBlock && /^# (.*?)/.test(line);
    });
}));

// 遍历文件生成表格数据
files.forEach((file, i) => {
    let headings = contents[i].map(p => p.replace(/^# /, '').trim());
    let tags = file.file.tags ? file.file.tags.join(", ") : "无标签";

    tableData.push({
        fileLink: file.file.link,
        heading: headings.join(' | '),
        tags: tags,
        modified: new Date(file.file.mtime).toLocaleString()
    });
});

// 生成表格
dv.table(["文件名", "一级标题", "标签", "编辑时间"],
    tableData.map(row => [row.fileLink, row.heading, row.tags, row.modified])
);