QuickAdd 正则保值替换选单

【解答合集】批量添加删除修改查找替换 中介绍了各种正则查找替换工具,
但它们往往整体替换查找到的值,而不能保留值中一部分、替换其他部分。

基本配置参 QuickAdd JS & Templater JS 简介及相互修改“QuickAdd Capture 加载内部代码”。

根据【已解决】批量修改一篇笔记内所有代码块的编程语言 #3,示例代码如下:

js quickadd 代码,点击展开
let file = app.workspace.getActiveFile()
const repi = A=> { let rgx; let form
    switch (su) {
    case sus[0]: rgx = /^#+ 、(.*)\n(\n[\s\S]*?)^\/$/gm; form = '[details="$1"]$2[/details]'; break
    case sus[1]: rgx = /^\[details=(.*?)\]$|\n?\[\/details\]/gm; form = (m, p1)=> p1 ? `### ${p1.slice(1, -1)}\n` : ''; break
    default: rgx = new RegExp('(\`\`\`.*)\\n.*?\\S[\\s\\S]*?\`\`\`$', 'gm'); form = (m, p1)=> m.replace(p1, `\`\`\`${su}`); break
    }; return A.replace(rgx, form) }
let lans = ['js', 'css']
let sus = ['fold', 'unfold'].concat(lans); let su = await this.quickAddApi.suggester(sus, sus); if (!su) return
await app.vault.process(file, raw=> repi(raw))
简要解析

QuickAdd 内部代码对 ``` 可能存在解析问题,

故对正则表达式里有 ``` 的情况,即示例代码 switch()default 项,使用了 new RegExp() 作变通。

new RegExp('(\`\`\`.*)\\n.*?\\S[\\s\\S]*?\`\`\`$', 'gm')

等价于 /(```.*)\n.*?\S[\s\S]*?```$/gm

switch() 每个 case 为一项自定义正则保值替换,可依示例代码继续添加,不要忘记每项末尾的 break

switch()、正则匹配及捕获组、.replace() 等相关 JS 方法可详询 AI。

运行命令弹出选单:image

选择“fold”:转为论坛折叠风格。

楼主设置任意级别标题首字 号和独行 / 号作为识别起止标志。

效果

imageimage

选择“unfold”:复原为日常风格。楼主设置复原为三级标题。

效果

imageimage

和最初文本相比,可以看到 [/details] 所在行是被移除了的,这也是为了更符合复原需要。

选择其他:批量修改当前活动文档内所有代码块的编程语言为所选。

imageimageimage