Расширение Showdown.js для изменения HTML

С помощью другого SO вопроса по этой теме я пробую расширение Showdown.js, которое не работает с html (работает нормально, если я хочу заменить только текст, но я хочу изменить html).

я хочу измениться

<img src="/path/to/image/image1.jpg" alt="bloo bap" title="" />
<img src="/path/to/image/image2.jpg" alt="shoo ba doo" title="" />

в

<img class="foo" src="/path/to/image/image1.jpg" alt="bloo bap" title="" />
<img class="foo" src="/path/to/image/image2.jpg" alt="shoo ba doo" title="" />

Мое расширение

var demo = function(converter) {
    return [
        {
            type    : 'lang', 
            regex   : '<img src=(.*)\/>', 
            replace : '<img class="foo" src=$1>'
        }
    ];
}

var converter = new Showdown.converter({extensions: [demo]});

но без сигары.

2 ответа

Расширения Showdown работает на HTML. Попробуй это:

type: 'html',
regex: '<img src=(.*)\/>',
replace: '<img class="foo" src=$1>'

Немного поздно, но для тех, кто пришел сюда через гугл:

Вам нужен output расширение, а не lang расширение.

Это расширение lang. Он заменяет ссылки на файл.md ссылками на файлы.html в качестве первого шага в вашем коде уценки:

return [
    {
        type    : 'lang', 
        regex   : /\[(.*)\]\((.*)\.md\)/g, 
        replace : '[$1]($2.html)'
    }
];

Это выходное расширение. Он добавляет атрибут класса ко всем изображениям на последнем этапе после создания всего HTML.

return [
    {
        type    : 'output', 
        regex   : '<img (.*)/>', 
        replace : '<img class="foo" $1>'
    }
];

Подробности здесь: https://github.com/showdownjs/showdown/wiki/extensions

Из моих тестов я считаю, что расширения Showdown работают только с текстом, а не с HTML. То есть расширения вызываются до того, как Showdown вступит во владение. Вместо создания расширения я использовал следующий код, и он работает как шарм

var postProcess = function(text) {
    return text.replace(/<img src=(.*)\/>/g, '<img class="foo" src=$1>');
}

postProcess(converter.makeHtml(text));
Другие вопросы по тегам