使用正则表达式在Javascript中解析Wiki标记

时间:2010-01-29 23:14:09

标签: javascript regex parsing wiki markup

我正在尝试使用the Javascript Creole Wiki Markup Parser解析一些Wiki样式的标记。我正在尝试扩展解析器来解析div标签,如下所示:

标记:<< any_content_here<<
HTML:<div class="left">content</div&gt;

标记:&gt;&gt; any_content_here&gt;&gt;
HTML:<div class="right">content</div>

标记:^^ any_content_here ^^
HTML:<div class="horz">content</div>

解析器使用正则表达式来解析标记,但正则表达式绝对不是我的强项,因为js文件实际上没有任何注释,我发现它特别难以编辑。我已经发布了这个人的博客,要求对此提供一些帮助,但由于帖子大约2岁,我不希望很快就能收到回复......

任何有关自定义的帮助,或者如果有人可以指出已经支持div的javascript解析器,那将非常感激。

1 个答案:

答案 0 :(得分:1)

如果你不关心嵌套,你甚至不需要正则表达式。只需将“<<”替换为“<div class='left'>”,依此类推。

要允许嵌套,您必须(1)更改标记,以使结束与开始不同(例如<L>内容</L>)和(2)运行正则表达式多次因为有水平。正则表达式(左边的div)将是:

<L>(((?!</?L>).)*)</L>

替换字符串:

<div class="left">$1</div>

这是一个负责解析所有级别的函数:

function parseLeft(markup) {
  var regex = /<L>(((?!<\/?L>).)*)<\/L>/g;
  out = markup.replace(regex, '<div class="left">$1</div>');
  if (out.length == markup.length) {
    return out;
  } else {
    return parseLeft(out);
  }
}

行动中的例子:

> parseLeft('<L> Outer div <L>inner div</L>outer again </L>');
<div class="left"> Outer div <div class="left">inner div</div>outer again </div>