解析 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/