javascript - 在 Markdown 元素之间转换

标签 javascript node.js markdown javascript-marked

解析 Markdown 文档并处理其元素以输出另一个 Markdown 文档的选项有哪些?

说出来

```
# unaffected #
```

# H1 #

H1
==

## H2 ##

H2
--

### H3 ###

应该转换成

```
# unaffected #
```

## H1 ##

H1
--

### H2 ###

### H2 ###

#### H3 ####

在 Node 环境中。目标元素可能会有所不同(例如,#### 可能会转换为 **)。

文档可能包含其他不受影响的标记元素。

如何获得?显然,不使用正则表达式(使用正则表达式而不是成熟的词法分析器会影响 # unaffected #)。我希望使用 marked 但它似乎只能输出 HTML,不能输出 Markdown。

最佳答案

这是一个带有外部 Markdown 解析器的解决方案,pandoc。它允许 custom filters在 haskell 或 python 中修改输入(还有一个 node.js port )。这是一个 python 过滤器,它将每个标题增加一级。让我们将其保存为 header_increase.py

from pandocfilters import toJSONFilter, Header

def header_increase(key, value, format, meta):
    if key == 'Header' and value[0] < 7:
        value[0] = value[0] + 1
        return Header(value[0], value[1], value[2])

if __name__ == "__main__":
    toJSONFilter(header_increase)

它不会影响代码块。但是,它可能会改变 setex-style headers将 h1 和 h2 元素(使用 ===---)转换为 atx 样式的 header (使用 #),反之亦然.

要使用该脚本,可以从命令行调用 pandoc:

pandoc input.md --filter header_increase.py -o output.md -t markdown

使用 node.js,您可以使用 pdc调用 pandoc。

var pdc = require('pdc');
pdc(input_md, 'markdown', 'markdown', [ '--filter', './header_increase.py' ], function(err, result) {
  if (err)
    throw err;

  console.log(result);
});

关于javascript - 在 Markdown 元素之间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35258304/

相关文章:

javascript - 有什么方法可以在 Google 表单上设置默认选择吗?

javascript - 单击按钮后在 css 弹出窗口中填充值

javascript - 如何从node.js调用JSON中的数组字段

javascript - 从MySQL服务器获取数据后,如何通过response.write方法将数据写入Node.js程序?

html - 如何在Golang中通过添加section标签将markdown转换为HTML

Javascript 数学效率舍入

javascript - 带有循环的奇怪 AJAX 行为

javascript - 无法摆脱 header X-Powered-By :Express

Python 将命令及其输出写入文件

r - 将一个markdown文件编织为两个输出文件