Shortcuts 教程:正则表达式修改 Markdown 链接
这是我的「写作流」Shortcuts。
上一篇文章中,我谈到由于官方编辑器完全不支持 Markdown 语法,我不得不利用 Shortcut 以及公众号 Web API 处理 Markdown 文本的图片,这个 Shortcut 节省了我成吨的操作。
今天讨论如何处理「link」,这个 Shortcut 使用「正则表达式」,它把 Markdown 的 link 转换为 footnote。和上次一样,这么做纯属无奈,我从来没想到我会写这种操作,可是要想干干净净写文章,我们不得不先花时间清理垃圾。
为什么需要转换
Markdown 中,link(链接) 和 footnote(脚注) 是完全不同的东西。
link 的格式是:
[文字](链接)
下面是一个 link:
[上一篇文章](https://aibooks.net/shortcuts/2020/07/28/iOS-Shortcuts-WebAPI-Upload-Photos.html)
它的作用是注明引用来源。当然,这种「source code」可读性太差,实际输出时,Markdown 编辑器会把它渲染为:
点击「上一篇文章」,就会打开对应网页。
footnote 则是注释,它的格式是,首先在正文中插入脚注符号,然后在文末插入对应的注释内容,即:
[^fn]
<!-- 正文其余部分 -->
[^fn]: 注释内容
「fn」叫什么随意,只要两者匹配即可,编辑器会自动改成数字。例如,这样一段话:
> 白云[^1]深处拥雷峰[^2],几树寒梅带血红。<br>
> 斋罢垂垂浑入定,庵前潭影落疏钟[^3]。<br>
<!-- 正文其余部分 -->
[^1]: 雷峰塔下白云庵。
[^2]: 原注:雷峰,又名夕照山。相传道人雷就曾居于此。有塔名雷峰塔,为南屏山支脉,为五代吴越王钱俶时所建,突出于杭州西湖南岸,一九二四年倾塌。(按:钱俶原名钱弘俶,吴越国最后一位君主,因"弘"字犯宋太祖父之名讳,宋后只称钱俶。
[^3]: 分别指三潭印月与南屏晚钟。
[^1]、[^2]、[^3] 都是 footnote。输出效果:
点文中小数字,它会跳到文章结尾处的注释:
点击的「↩︎」,它会跳回正文。
由上可见,link 和 footnote 不该混为一谈。
然而,公众号编辑器不支持 Markdown,如果要指明引用出处,唯一的办法只能把和注释混合,放在文末。例如,《圣约》的书评,注释是这样:
3、5、9 这几条本应是 link 而不是 footnote。
因此,发到公众号后台之前,必须把 Markdown 中的 link 转换为 footnote。
转换方法
解决的方法我能想到至少两种。第一种简单直接,写一段 HTML code,然后生成 rich text 即可。例如上面那首诗,HTML 可以这样:
输出的结果是:
看起来还是不错的,现在把结果复制到公众号编辑器,应该可以正常显示。
当然了,这种文本手写是不可能的,但其实 HTML 看起来麻烦,实际非常简单,模式千篇一律,可以写一个 Shortcut,无论有多少个脚注,一键转换。
第二种方法是保留 footnote,只把 link 转换成 footnote,然后再生成 rich text,效果差不多,我用的就是这种方法,下面说一下这个 Shortcut 的流程。
Shortcut
现在的问题相当于,如下文本,
[title 1](link1)
Some texts here
[title 2](link2)
More texts here
如何转换为:
[^title 1]
Some texts here
[^title 2]
More texts here
[^title 1]: link1
[^title 2]: link2
直接上完整的 Shortcut:
解析:
- 「[(.*?)]((.*?))」是一段正则表达式,它的作用是匹配文中所有形如 []() 的组合,即 link,无论括号中是什么。
- 循环,有多少个 link,就循环多少次。每个循环,执行下面 3-7 步。
- 这个正则表达式匹配 [],即文字部分,结果保存在标量「Title」中。
- 匹配 (),即网址,结果保存在标量「Link」中。
- 原来是 [Title](Link) ,经过重组,变成了[^Title]: Link,即一条 footnote,这是放在文末那一部分。
- 把文本中的 [Title](Link) 换成 [\^Title]。
- 每次循环结束,更新一下全文,这一步很重要,否则最后得到的结果是没替换过的原始版本。
- 这里的「Input」是替换过的文章正文,「Footnote」是一个数组,每一个元素是一条 footnote,它放在文章最后。
Run 这个 Shortcut,输出结果就是上上张图所显示的。另外,截图中最上面的 Text 是我用来测试的,最后要用实际文本替换。
这个 Shortcut 还是很简单的,但同样,它能节省我大量无用操作。无论多少个 link,几秒钟搞定。
下一步
iA Writer、Shortcuts、Working Copy 这几个 app 是我用 iPad 写东西的最重要的工具。Working Copy 还没说过,它是 iOS 的 GitHub 客户端,自从 GitHub 私有仓库免费之后,我就把我所有的文本都保存在 GitHub 了。没有 Working Copy,要 Push/Pull,就只能用 GitHub API(和上一篇传图的道理类似),有了 Working Copy,一切都很简单了,操作 Git 的文件,就像普通文件夹,复制、粘贴等等,非常方便。更妙的是,Working Copy 和 Shortcuts 集成非常好,我可以用它去「Git」一张图片,重命名,然后把图片改成 iA Writer 的 Content Block 语法,再打开 iA Writer 粘贴进去,这一切操作只要一个 Shortcut 就自动搞定,这是后话。
另外,关于定制主题,上次我说:
如果嫌样式不好看,可以自己修改 HTML,然后写一个脚本,以后每篇文章都做同样修改。如果不会写,可以用前面提到的在线转换工具,再去后台粘贴。
以及
前面说过,这些工具无非就是应用一套定义好的 HTML + CSS。因此,更好的 DIY 方式是,自己定义一个公众号专用主题,iA Writer 以及 Ulysses 等编辑器都支持自定义主题模版
后来我发现,其实解决办法非常简单,写一段 CSS,放在每篇文章最前面就可以了,也是一个 Shortcut 搞定。
这样,有了上一篇,本文,以及我接下来要说的 Working Copy,CSS 模版,这四篇文章差不多能完整说明的我的「写作流」了。
最后,有人可能要说,写文章不就是写字吗?为什么要搞的这么麻烦呢?
这是对「效率」的误解,我所做的,不过是把重复的工作自动化而已。这样做的根本目的是,你可以只关注内容,而不必在意格式。试想那些第三方编辑器,你每写一篇文章,都要把排版所做的所有工作重复再做一遍,这不才是最麻烦的吗?如果一键搞定标题、图片、链接、颜色、行距、等等,岂不才是最效率的方法?这样你能够把最重要的精力放在文字上。
当然,方法有很多,效率也有高低,我的方法只是依照我的习惯(我只用 iPad,不用电脑,偏爱 Shortcut,并用 GitHub 管理)。
希望我的文章抛砖引玉,促使你思考自己的方法。