【已解决】原样复制 dataview js 输出的内容

笔记正文如下:


需求::基本信息
产品::[[间隔重复]]
编码::1.1.1

正文

间隔重复(英语:Spaced repetition)是一种利用[[心理学]]间隔效应,通过不断复习所学内容并逐步增加两次复习间的时间间隔来提升效率的学习技巧。

使用脚本检索所有[[间隔重复]]的笔记

//输入目标小标题(含#),例如:#### 项目进度条
const header = '### 正文'

// 按【路径或文件夹、文件名、标签】筛选并按修改时间降序排列
const pages = dv.pages('[[间隔重复]]').filter(p => p.file.name.includes("") && p.file.path.includes("文献笔记")).filter(p => p.file.name.includes("") || p.file.name.includes("")).sort(p=>p.编码,"asc");

// This regex will return text from the Summary header, until it reaches
// the next header, a horizontal line, or the end of the file
const regex = new RegExp(`\n${header}\r?\n(.*?)(\n#+ |\n---|$)`, 's')

for (const page of pages) {
    const file = app.vault.getAbstractFileByPath(page.file.path)
    // Read the file contents
    const contents = await app.vault.read(file)
    // Extract the summary via regex
    const summary = contents.match(regex)
    //显示全部包括空结果if (summary) {
    //不显示空结果if (summary && summary[1].trim()) {
    if (summary && summary[1].trim()) {
        // Output the header and summary
        //dv.header(3, '[['+ file.basename + '|'+page.编码+' '+page.需求+']]')
        dv.header(3, page.编码+' '+page.需求)
        //或者dv.header(2, '[[' + file.basename + ']]')
        dv.paragraph(summary[1].trim())
    }
}

dataview展示的内容:心理学是连接整正常

将这段内容复制出来出来

连接被转换成:心理学, 不知道如何保持:[[心理学]]

不被转义?

试试把 dv.paragraph 那行复制一行,然后把其中一个 dv.paragraph 改为 navigator.clipboard.writeText,运行,然后任意位置直接 Ctrl + V 粘贴。

解释:navigator.clipboard.writeText() 文本写入剪贴板

要复制的时候用一下,平时注释掉,不然会一直复制的。

顺便一问,你用 dv.pages() 筛选所有含出链“间隔重复”的文档,然后用批处理 p.file.path 限制文件路径?(一般都是反过来)

navigator.clipboard.writeText(summary[1].trim())

这个的确可以复制到剪贴板,但是,只能复制for 循环中中的一部分。

能否将for循环的内容,全部复制出来?

最后问文心一言,搞定,谢谢你


//输入目标小标题(含#),例如:#### 项目进度条  
const header = '### 正文';  
  
// 按【路径或文件夹、文件名、标签】筛选并按修改时间降序排列  
// 注意:这里应该是按照某个字段排序,但'编码'需要是页面的一个属性。  
// 如果'编码'是页面的一个字段,应确保它是已定义的。否则,排序可能不会正常工作。  
// 另外,原代码中的排序是升序("asc"),如果需要降序,应改为"desc"。  
// 由于您之前要求的是按照'编码'升序排列,这里保持为'asc'。  
const pages = dv.pages('"9文献笔记"').filter(b => b.产品?.path == '5卡片盒/间隔重复.md').sort(p => p.编码, "asc");  
  
// This regex will return text from the Summary header, until it reaches  
// the next header, a horizontal line, or the end of the file  
const regex = new RegExp(`\\n${header.replace(/#/g, '\\#')}\\r?\\n(.*?)(\\n#+ |\\n---|$)`, 's');  
  
let fulltext = ''; // 初始化fulltext为空字符串  
  
for (const page of pages) {  
    const file = app.vault.getAbstractFileByPath(page.file.path);  
    // Read the file contents  
    const contents = await app.vault.read(file);  
    // Extract the summary via regex  
    const match = contents.match(regex);  
    if (match && match[1].trim()) {  
        // 显示页面内容  
        dv.header(3, page.编码 + ' ' + page.需求);  
        dv.paragraph(match[1].trim());  
          
        // 同时将内容添加到fulltext  
        fulltext += `### ${page.编码} ${page.需求}\n${match[1].trim()}\n\n`;  
    }  
}  
  
// 复制到剪贴板  
if (navigator.clipboard) {  
    navigator.clipboard.writeText(fulltext)  
        .then(() => console.log('Text copied to clipboard'))  
        .catch(err => console.error('Error in copying text: ' + err));  
} else {  
    console.error('Clipboard API not available');  
}



1 个赞