0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

マークダウン記法から装飾を外す

Last updated at Posted at 2022-01-18

単純に マークダウン記法のテキスト→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\`
![img](https://github.com/)
`);
/*
↓
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とかに介入してタグの配置をブロックすることも考えましたが面倒くさそうなのでやめました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?