markdown-it link引用空格处理

邵宏达
2023-12-01

markdown-it link引用空格处理

md文档的命名存在空格,实际上在link时,将空格改成 %20即可:

[text link](fileNamePrefix fileNamePostfix) error
[text link](fileNamePrefix%20fileNamePostfix) ok

但由于md文档编写者不同意,这样做,那没辙 
只能去修改markdown解析部分了。

实现

因为是使用的vuepress做markdown解析,所以在.vuepress/config.js,添加如下代码

markdown: {
    extendMarkdown: md => {
      md.use(function (md) {
        var defaultRender = md.renderer.rules.text
        md.renderer.rules.text = function (tokens, idx, options, env, self) {
          if (tokens[idx].content.startsWith("[") && tokens[idx].content.trim().endsWith(")")) {
            const content = tokens[idx].content
            const inline = content.substring(content.indexOf("[") + 1, content.indexOf("]"))
            let contentEnd = content.substring(content.indexOf("(") + 1, content.length - 1).replace(" ", "%20")
            return `<p><a href="` + contentEnd + `">` + inline + `</a></p>`
          }
          return defaultRender(tokens, idx, options, env, self);
        };
      })
    }
  },

说明

markdown在link_open解析时,当link的路径中存在空格,就不会正确解析成link_open,会变成text类型,所以在解析text类型时,如果为[开始,)结束,就手动将内容包裹为link的html形式返回

另外

实际上这样写不是很好,最好的方式应该是自己写插件去处理,但是markdown解析好复杂啊。。。所以就这样了 

参考博文: markdown-it 插件如何写(一)

 类似资料: