0

如何在 Ruby 中使用一两个正则表达式替换 DokuWiki 嵌套列表字符串?

例如,如果我们有这个字符串:

  * one
  * two
    * three
  * four

我们应该得到这个 HTML:

我做了一个正则表达式替换整个列表。例如:

s.sub!(/(^\s+\*\s.+$)+/m, '<ul>\1</ul>')

它可以正常工作。但是如何替换单个列表项?

4

1 回答 1

1

正则表达式:

以下是一些示例列表:

  * first item
  * second item

No longer a list

  * third item? no, it's the first item of the second list

  * first item 
  * second item with linebreak\\ second line
  * third item with code: <code>
some code
comes here
</code>
  * fourth item

匹配所有列表的正则表达式

(?<=^|\n)(?: {2,}\*([^\n]*?<code>.*?</code>[^\n]*|[^\n]*)\n?)+

查看实际操作:http ://rubular.com/r/VMjwbyhJTm

编码 :

用 a 包围所有列表<ul>...</ul>

s.sub!(/(?<=^|\n)(?: {2,}\*(?:[^\n]*?<code>.*?<\/code>[^\n]*|[^\n]*)\n?)+/m, '<ul>\0</ul>')

添加缺少<li>的s(以下代码中的s2<ul>...</ul>是添加的字符串)

s2.sub!(/ {2,}\*([^\n]*?<code>.*?<\/code>[^\n]*|[^\n]*)\n?/m, '<li>\1</li>')

注意: 嵌套列表不能用这个正则表达式处理。如果这是一个要求,解析器将更适应!

于 2012-09-21T15:41:39.693 回答