アンダースコアを含むテキストが必要です。
コードではないので、コード形式を使用したくありません。
マークダウンをイタリック体にする命令として扱うのをやめたいです。
_each_underscore (参照!) をエスケープできます\
が、合計で 20 個あり、ソースでは見苦しく、保守が難しく、あまり DRY ではありません。
他のオプションはありますか?
アンダースコアを含むテキストが必要です。
コードではないので、コード形式を使用したくありません。
マークダウンをイタリック体にする命令として扱うのをやめたいです。
_each_underscore (参照!) をエスケープできます\
が、合計で 20 個あり、ソースでは見苦しく、保守が難しく、あまり DRY ではありません。
他のオプションはありますか?
一部の Markdown 実装 – 特に Stack Overflow のサーバー側 C# バージョンMarkdownSharp (オプションの動作) およびクライアント側 JavaScript バージョンPageDownだけでなく、GitHub のフレーバーなど – は、まさにあなたが説明した理由で Markdown 仕様から逸脱しています。
Stack Overflow に関するこれまでの経緯については、2 つのブログ投稿Three Markdown GotchasとMarkdown, 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;
}