为什么Github Flavored Markup只为以[\ w \<]开头的行添加换行符?

时间:2012-11-02 14:33:01

标签: github newline markdown github-flavored-markdown

在我们的网站(针对高度非技术人员)中,我们让他们在发送电子邮件时使用Markdown。这样,他们得到了大胆,斜体等不错的东西。然而,非技术性的,他们永远不会超越“添加两行以使换行实际工作”的怪癖。

出于这个原因,我们主要使用Github Flavored Markdown的变体。

我们主要借用了这一部分:

# in very clear cases, let newlines become <br /> tags
text.gsub!(/^[\w\<][^\n]*\n+/) do |x|
   x =~ /\n{2}/ ? x : (x.strip!; x << "  \n")
end

这很好用,但在某些情况下它不会添加新行,我想关键是那个评论的“非常明显的情况”部分。

如果我正确地解释它,这只是为以单词字符或'&lt;'开头的行添加换行符。

有谁知道为什么会这样?特别是,为什么'&lt;'?

将两个空格添加到基本上任何东西(以空格,连字符,任何东西开头的行)会有什么危害?

2 个答案:

答案 0 :(得分:1)

'&LT;'在行的开头使用字符来引用消息。我猜这就是原因。

答案 1 :(得分:1)

这个问题的另一个答案是错误的。这与引用无关,而降价引用的字符为>

 ^[\w\<][^\n]*\n+

让我们将上述正则表达式分解为几部分:

  • ^ =字符串的锚点开始。
  • [\w\<]匹配单词字符或单词边界的开头。 \< 是文字,而是GNU字边界。请参阅here(为\<执行 ctrl + f )。
  • [^\n]*匹配任意长度的非换行符
  • \n匹配新行。
  • 我认为,
  • +是一种占有量词。

我相信,但我不是100%肯定,这只是用来将x设置为一行文字。然后,繁重的工作完成了下一行:

x =~ /\n{2}/ ? x : (x.strip!; x << "  \n")

这表示&#34;如果x满足正则表达式\n{2}(即有两个换行符),请保留x。否则,剥离x并附加换行符。