2016-11-03 5 views
2

私は、インデントされた段落をmarkdownを使ってコードブロックに変換する必要があるものを作っています。ここで私が何を意味するかです:コードブロックに字下げテキスト(Markdown)を変換する

This is normal text, nothing to worry about. 
    const normalFunction = (...args) => { 
     return ...args; 
    } 
Please turn^into codeblock. Thx 

は、私はそれが

This is normal text, nothing to worry about. 
```js 
const normalFunction = (...args) => { 
    return ...args; 
} 
``` 
Please turn^into codeblock. Thx 

そして、このような他の全ての存在に変換されるようにしたいと思います。私はこれに対して多くの異なるRegExを試してみたところ、動作すると思っていたものが見つかりましたが、PHP用であり、JavaScript RegExに変換できませんでした。

さらに多くの機能を備えているので、ES6を使用することもできます。さらに、お勧めします。 現在使用しているRegExは、/({4}[\n\r\s\S]+;)/giですが、複数のコードブロックがある場合はすべてを選択し、コメントの場合は;で終了しません。

+0

マークダウンコンパイラでテキストセグメント全体を実行しない理由はありますか?特別な書式設定が行われていない場合は、前と同じようにテキストを返すだけです。 私はこれまでにこのようなものを構築し、 'marked'ライブラリを使用しました。 https://github.com/chjj/marked – Falk

+0

@FalkいくつかのHTMLを 'marked 'で解析することからそのマークダウンが得られるので、私は再びコンパイラで実行することは考えていませんでした。私はそれを試してみます。提案していただきありがとうございます。 –

+0

私はあなたのお勧めをしようとしましたが、コードブロックの4つのスペースインデントが削除されました。 –

答えて

0

ここで私の遅れた自己解答です。

NodeJSとto-markdown NPMモジュールを使用していました。 明らかに、to-markdownは、HTMLタグを必要なものに変換するフィルタをサポートしています。 タグpreのフィルタを追加したので、コードブロックに必要なマークダウンが追加されました。

これは私の最終的なコードです:私は何もpreタグ内で<code lang=##></code>タグを置き換えるためにそこにいくつかの正規表現の使用を

return toMarkdown(str, { 
    gfm: true, 
    converters: [{ 
    filter: "pre", 
    replacement: content => `\`\`\`${lang.toLowerCase()}\n${content.replace(/<\/?code(\S+)?>/g, ``)}\n\`\`\``, 
    }], 
}); 

私はこれが助けてくれることを願っています。申し訳ありませんが、私たちは自分自身のために答えを書くかどうか分からなかった。


EDIT:これは正規表現とは何の関係も持っていない場合、私が気付いて、そしてそれはあなたが見ていると望んでいたものだ場合、私はお詫び申し上げます。

関連する問題