【解答合集】批量添加删除修改查找替换 中介绍了各种正则查找替换工具,
但它们往往整体替换查找到的值,而不能保留值中一部分、替换其他部分。
基本配置参 QuickAdd JS & Templater JS 简介及相互修改“QuickAdd Capture 加载内部代码”。
js quickadd 代码,点击展开
let Editor = app.workspace.activeEditor.editor, file = app.workspace.getActiveFile()
, repi = A=> { let rgx, 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']
, sus = ['fold', 'unfold'].concat(lans), su = await this.quickAddApi.suggester(sus, sus); if (!su) return
Editor.getSelection() ? Editor.replaceSelection(repi(Editor.getSelection())) : 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。
运行命令弹出选单。若有选区,查找替换鼠标选区内文本;无选区替换全文。
选择“fold”:转为论坛折叠风格。
楼主设置任意级别标题首字 、
号和独行 /
号作为识别起止标志。
效果
→
选择“unfold”:复原为日常风格。楼主设置复原为三级标题。
效果
→
和最初文本相比,可以看到 [/details]
所在行是被移除了的,这也是为了更符合复原需要。
选择其他:批量修改代码块的编程语言为所选。
→ →