所谓人工智能,主要靠的是人工。

——开了个玩笑。不过,实现智能化剪贴板,的确需要许多人工的成分。


为什么需要智能剪贴板?


在移动端上,复制粘贴是最为常见的操作之一。对我而言,将所需信息复制到剪贴板之后,除了用于分享和记录之外,还可能将其输入到某个 workflow 进行更复杂的处理——所以我有许多 workflow 开头就是 Get Clipboard。将这些 workflow 放到通知中心中,我可以十分方便地使用它们,但久之便拥挤不堪。所以我开始考虑将它们整合到一起的方法,整合的结果就是本文要介绍的智能剪贴板按钮——它让我可以在复制某几类信息之后直接按下按钮,而不用费事去找与之对应的workflow,Workflow 的通知中心插件也变得精简了许多。

实现智能化的方法


原理其实很简单,就是利用 Workflow 中的 Actions 来识别 Clipboard 中的特定内容,根据不同内容执行不同的后续 Actions 或者其他 Workflow(Workflow 1.7.1:终于能在一个 Workflow 里运行另一个 Workflow 了

Smart Clipboard


内容识别我用到了以下两组 Actions

  1. If (Contains) 套 If (Contains)
  2. Match Text + Count + If (Is Less Than)

If Contains 的关键词识别

例如分析剪贴板内容来触发「保存 Twitter 图文到 Bear」这个 Workflow,关于这个 Workflow,可详见我的文章:Workflow + Pythonista 抓取 Twitter 图文内容

做法就是在 Clipboard 这个主 Workflow 下设置一个 If Contains 来判断剪贴板内容是否包含「twitter」字符串。

识别 Twitter 链接

举一反三,你可以判断 Clipboard 里的链接是来自知乎(包含zhihu)、P站(包含pixiv),还是来自国际版微博(包含oversea)呢。如果需要同时判断这三个,目前我只能像俄罗斯套娃那样 If Contains 套 If Contains 了——希望未来 Workflow 能引入 Switch/Case 这样的 Action !

利用正则表达式来匹配特定格式的字段

正则表达式是比较高级的字符串处理手段,但上面提到的 If Contains 似乎不支持正则表达式。其实,Workflow 里有几个 Action 是支持正则表达式的,Match Text 这个 Action 就是其中之一。

所谓正则表达式就是利用事先定义好的符号来表示一类字符(比如所有字母、所有数字),从而建立匹配规范来提取、检索符合该规范的字符串。

正则表达式中的常用符号

比如,利用^[0-9a-fA-F]{40}$这行正则表达式,就可以匹配 Input 中可能存在的磁力链哈希码(Hash)。

匹配 Hash 码

在 Workflow 中我是这样使用的:

Match Text 的使用
  1. 先利用支持正则表达式的 Match Text 匹配是否有符合特定规则的字符串
  2. 用 Count 计算匹配结果数量
  3. 如果匹配结果数量不少于1,那么表示匹配成功
  4. 如果匹配成功则重新获取剪贴板内容,进行下一步操作


尾巴


以上介绍的 If Contains 和 Match Text 两套方案,可以帮助你完成大部分剪贴板内容分析。

我已经把许多剪贴板相关的 Workflow 整合成为一个单个的 Clipboard 按钮——每次复制内容之后,只需要无脑按下通知中心插件中的 Workflow 按钮,之后就让它自行识别内容,然后运行不同的 Workflow 吧。 


4
6