【问题标题】:Parsing Wiki markup in Javascript using regex使用正则表达式在 Javascript 中解析 Wiki 标记
【发布时间】:2010-01-29 23:14:08
【问题描述】:

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

标记: HTML:<div class="left">content</div>

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

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

解析器使用正则表达式来解析标记,但正则表达式绝对不是我的强项,而且由于 js 文件几乎没有 cmets,我发现它特别难以编辑。我已经在这个人的博客上发帖寻求帮助,但由于帖子已经有 2 年历史了,我不希望很快收到回复......

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

【问题讨论】:

    标签: javascript regex parsing wiki markup


    【解决方案1】:

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

    要允许嵌套,您必须 (1) 更改标记以使结尾与开头不同(例如 <L>content</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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多