如何在摊牌中将单行换行符视为<br>?

How to treat single line breaks as <br> in showdown?

如何使用摊牌 GitHub 风格处理换行符?

我试过一个扩展程序,可以做类似的事情:

return text.replace(/[ ]*\n/g, "<br />\n")

它在某些情况下有效,但会破坏列表。

好吧,所以我想出了一个扩展来做到这一点。

/**
 * Showdown extension for GFM newlines.
 * 
 * In very clear cases, let newlines become <br/> tags.
 *
 * This implementation is adopted from showdown-ghost.
 *
 */
(function () {
    var newline = function () {
        return [{
            type: 'lang',
            filter: function(text) {
                return text.replace(/^( *(\d+\.  {1,4}|[\w\<\'\">\-*+])[^\n]*)\n{1}(?!\n| *\d+\. {1,4}| *[-*+] +|#|$)/gm, function(e) {
                    return e.trim() + "  \n";
                })
            }
        }];
    };

    if (window.showdown) {
        window.showdown.extensions.newline = newline;
    }
})();

虽然正则表达式未经过 100% 测试并且在极少数情况下可能会失败,但这对我来说效果很好,所以请考虑一下自己。

感谢这个伟大的扩展。这对我的一个项目很有帮助。

看起来这种定义扩展的方式是deprecated now。由于他们没有更新文档,但我使用 prettify 扩展作为模板将您编写的扩展更新为摊牌中编写扩展的新方式:

(function (extension) {
  'use strict';

  if (typeof showdown !== 'undefined') {
    extension(showdown);
  } else if (typeof define === 'function' && define.amd) {
    define(['showdown'], extension);
  } else if (typeof exports === 'object') {
    module.exports = extension(require('showdown'));
  } else {
    throw Error('Could not find showdown library');
  }

}(function(showdown){
  'use strict';
  showdown.extension('newline', function() {
    return [{
      type: 'lang',
      filter: function(text) {
        return text.replace(/^( *(\d+\.  {1,4}|[\w\<\'\">\-*+])[^\n]*)\n{1}(?!\n| *\d+\. {1,4}| *[-*+] +|#|$)/gm, function(e) {
          return e.trim() + "  \n";
        });
      }
    }];
  })
}));

也许对未来的读者有所帮助。 Showdown 现在可以选择这样做。

converter.setOption('simpleLineBreaks', true);