macOS Shortcuts 不支持原生正则表达式,需通过「运行 Shell 脚本」调用 sed、awk 或 perl 等命令实现;也可用 Automator 搭配 JavaScript 的 RegExp 替代。

macOS 的 Shortcuts 应用本身不直接支持正则表达式(regex)引擎,但可通过系统级工具间接实现——核心路径是:用 Shortcuts 调用 macOS 自带的命令行工具(如 sed、awk 或 perl),在「运行 Shell 脚本」动作中执行 regex 操作。
为什么不能直接在 Shortcuts 里写正则?
Shortcuts 的原生文本操作(如“查找和替换”“提取匹配项”)仅支持简单字符串或通配符,不识别 \d+、[^a-z]+ 等标准正则语法。想做精准模式匹配(比如提取邮箱、清洗 URL 编码、转换 Markdown 链接格式),必须借助终端命令。
实际可用的 Shell 正则方案
在 Shortcuts 中添加「运行 Shell 脚本」动作,输入以下典型命令即可:
-
提取所有邮箱地址:
echo "$1" | grep -oE '\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b' -
把 Markdown 链接 [文字](url) 转成脚注格式:
echo "$1" | perl -pe 's/\[([^\]]+)\]\(([^)]+)\)/\[$1\]\[\$2\]/g; s/\[([^\]]+)\]\(([^)]+)\)/\[$1\]\[\$2\]/g'(需配合后续手动补全脚注定义) -
解码 URL 编码乱码(如 %E4%B9%B1):
echo "$1" | python3 -c "import urllib.parse, sys; print(urllib.parse.unquote(sys.stdin.read().strip()))" -
删除空行并压缩多余空白:
echo "$1" | sed '/^$/d' | sed 's/[[:space:]]\+/ /g'
关键操作细节
确保 Shell 脚本动作设置正确:
- 选择「Shell」为
zsh(macOS 默认) - 勾选「对输入使用参数」,变量名填
$1(Shortcuts 会自动把上一步文本传入) - 输出类型选「文本」,结果可继续用于后续动作(如「显示通知」或「存储为变量」)
- 若命令含单引号,注意嵌套时用双引号包裹整个命令,避免解析错误
替代方案:用 Automator + JavaScript
如果 Shell 不够直观,可新建 Automator 快捷操作,用「运行 JavaScript」动作:
- JavaScript 支持
String.prototype.replace()和RegExp对象 - 例如:
text.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '[$1][^$2]') - 再通过「运行 AppleScript」或「复制到剪贴板」衔接 Shortcuts 流程
不复杂但容易忽略:每次调用 Shell 命令前,建议先用「显示结果」动作验证原始文本是否已按预期传入,避免因空值或编码问题导致 regex 失效。


















