用正则表达式匹配并修复MD文档中的引用路径错误问题

最近在写文档时候经常需要跨平台阅读, Windows向下兼容Unix的路径分隔符写法, 但是反之不成立, 如果使用Win风味的路径分隔符不管是Github还是Hexo的文件引用都会失效, 因此需要检查本地文档的分隔符号使用情况

写法

要匹配 Windows 路径分隔符的路径(如..\Code\DataProcessing.ipynb.\aaa.file), 我们可以使用以下正则表达式

1
[.]{1,2}\\(?:[^\\]+\\)*[^\\]+\.[^\\]+

可以直接通过VS Code打开文档所在路径, 全局匹配并替换

解释

  1. [.]{1,2}: 匹配一个或两个点 (...), 表示当前目录或上一级目录。
  2. \\: 匹配反斜杠 (\), 这是 Windows 中的路径分隔符。由于反斜杠在正则表达式中是转义字符, 因此需要双写为 \\
  3. (?:[^\\]+\\)*: 匹配零个或多个目录部分, 目录名由非反斜杠字符组成, 后面跟一个反斜杠。(?:...) 是一个非捕获组, [^\\]+ 表示匹配任意非反斜杠的字符, * 表示前面的组可以重复零次或多次。
  4. [^\\]+\.[^\\]+: 匹配文件名和扩展名, 文件名和扩展名都由非反斜杠字符组成, 使用 \. 匹配小数点。

示例

  • ..\Code\DataProcessing.ipynb: 匹配
  • .\aaa.file: 匹配
  • C:\Users\example.txt: 不匹配(因不符合最前面的 ...

这个正则表达式可以灵活匹配绝大多数相对路径中使用 Windows 分隔符的情况, 尤其是以 ... 开头的相对路径。