単純に マークダウン記法のテキスト→HTML→HTMLタグ削除の流れで外しています。
markdown-itを使用します。
使いまわしそうなのでパッケージにしてます。
npm i markdown-it-remove
(リポジトリ)
export function removeMdPlugin(md,
{
removeTags = true,
replaceNewlineValue = null,
escapeHtml = false,
}={}) {
md.renderer.__oldRender = md.renderer.render;
md.renderer.render = (...params)=>{
let html:string = md.renderer.__oldRender(...params);
var tmpHtml = (removeTags) ? html.replace(/(<([^>]+)>)/gi, '') : html;
tmpHtml = (replaceNewlineValue === null) ? tmpHtml : tmpHtml.replace(/\n|\r/gi,replaceNewlineValue);
if(escapeHtml) return md.utils.escapeHtml(tmpHtml);
else return tmpHtml;
};
}
//------
import MarkdownIt from 'markdown-it';
const md = new MarkdownIt().use(removeMdPlugin ,{});
var result = md.render(`
# markdown-it!
## markdown-it!
### markdown-it!
[GitHub](https://github.com/)
\`inline\`

`);
/*
↓
markdown-it!
markdown-it!
markdown-it!
GitHub
inline
*/
説明
やっていることは本当に単純で html.replace(/(<([^>]+)>)/gi, '')
でタグを空文字に置き換えているだけです。あとは任意でtmpHtml.replace(/\n|\r/gi,replaceNewlineValue)
で改行コード(\n|\r)を半角空白とかに置き換えています。
markdown-itプラグインについて
装飾を外すことと直接関係ないですが書き残しておきます。
md.rendererはRendererクラスであり、render関数はクラスに依存しています。そのためrender関数を__oldRenderとしてmd.rendererにぶら下げることでエラーを回避しています。
rulesとかに介入してタグの配置をブロックすることも考えましたが面倒くさそうなのでやめました。