我在我的网站上使用了markdown,我想对新闻文章进行一些简单的解析。
如何解析 markdown 以提取所有块引用和链接,以便我可以将它们与文档的其余部分分开突出显示
例如,我想解析文档中的第一个块引用(>),这样无论它出现在文档中的哪个位置,我都可以将其推到顶部。 (类似于许多新闻网站所做的,突出文章的某些部分。但随后将其取消阻止为主体引用。 因此,它发生了两次(一次在顶部突出显示,然后通常在文档中发生)。
我假设您正在尝试在渲染时执行此操作,当降价将转换为 HTML 时。为了给你指出正确的方向,你可以这样做的一种方法是
- 将降价转换为 HTML
- 将 HTML 传递给 Nokogiri
- 抓住第一个
<blockquote>
,复制它,并将其注入Nokogiri节点树的顶部
结果将是第一个<blockquote>
的副本。
Redcarpet 2是将Markdown转换为HTML的绝佳宝石。Nokogiri 是 HTML 解析的最佳选择。
如有必要,我可以编写示例代码,但是这两个 gem 的文档都很详尽,而且这项任务很简单,只需从文档中的示例拼凑出一些位。这至少回答了你关于如何去做的问题。
编辑
根据需要,这也可以通过一行jQuery来完成。
$('article').prepend($($('article blockquote').get(0)).clone())
给定页面上文章的<article>
DOM 元素,抓取第一个<blockquote>
,克隆它,然后将其附加到<article>
的顶部。
我知道维基标记(即 ruby 的 wikicloth)与您在解析链接、类别和引用时具有类似的实现。 虽然我不确定块引号,但它可能更适合。
像这样:
data = "[[ this ]] is a [[ link ]] and another [http://www.google.com Google]. This is a <ref>reference</ref>, but this is a [[Category:Test]]. This is in another [[de:Sprache]]"
wiki = WikiCloth::Parser.new(:data => data)
wiki.to_html
puts "Internal Links: #{wiki.internal_links.size}"
puts "External Links: #{wiki.external_links.size}"
puts "References: #{wiki.references.size}"
puts "Categories: #{wiki.categories.size} [#{wiki.categories.join(",")}]"
puts "Languages: #{wiki.languages.size} [#{wiki.languages.keys.join(",")}]"
我还没有看到任何这样的解析器可用于降价。 使用红地毯,转换为HTML,然后使用Nokogiri似乎有点复杂。