18

アンダースコアを含むテキストが必要です。

コードではないので、コード形式を使用したくありません。

マークダウンをイタリック体にする命令として扱うのをやめたいです。

_each_underscore (参照!) をエスケープできます\が、合計で 20 個あり、ソースでは見苦しく、保守が難しく、あまり DRY ではありません。

他のオプションはありますか?

4

1 に答える 1

16

一部の Markdown 実装 – 特に Stack Overflow のサーバー側 C# バージョンMarkdownSharp (オプションの動作) およびクライアント側 JavaScript バージョンPageDownだけでなく、GitHub のフレーバーなど – は、まさにあなたが説明した理由で Markdown 仕様から逸脱しています。

Stack Overflow に関するこれまでの経緯については、2 つのブログ投稿Three Markdown GotchasMarkdown, One Year Laterを参照してください。

これはMarkdownに対する一般的な批判であるため、この動作をユーザーが設定できるようにするか、より厳密なバージョンをそのまま使用する実装がおそらくもっとあるでしょう。したがって、使用している実装によって異なります。

John Gruber のオリジナルの Perl 実装 (つまり、「大量の正規表現置換」バージョン) に基づくポートを使用している場合、この変更を自分で行うのはかなり簡単なはずです。関連する関数は、_DoItalicsAndBold(元の Perl バージョン、Showdown/PageDown)、DoItalicsAndBold(MarkdownSharp)、_do_italics_and_bold(python-markdown2) などと呼ばれる可能性があります。

ここでスタック オーバーフローで使用されているより厳密な正規表現については、その関数の PageDown バージョンを見てください。

function _DoItalicsAndBold(text) {

    // <strong> must go first:
    text = text.replace(/([\W_]|^)(\*\*|__)(?=\S)([^\r]*?\S[\*_]*)\2([\W_]|$)/g,
    "$1<strong>$3</strong>$4");

    text = text.replace(/([\W_]|^)(\*|_)(?=\S)([^\r\*_]*?\S)\2([\W_]|$)/g,
    "$1<em>$3</em>$4");

    return text;
}
于 2012-04-25T06:00:23.007 に答える