【问题标题】:How to parse wikitext tables HTML?如何解析 wikitext 表格 HTML?
【发布时间】:2016-07-26 15:21:09
【问题描述】:

解析表格的Wikicode是

{| class="wikitable"
|-
! Header 1
! Header 2
! Header 3
|-
| row 1, cell 1
| row 1, cell 2
| row 1, cell 3
|-
| row 2, cell 1
| row 2, cell 2
| row 2, cell 3
|}

我需要在 file 中使用正则表达式将其解析为 HTML 格式,例如 <table> </table>

【问题讨论】:

  • 你链接的那个文件是什么?它会将 wikitables 转换为 html 吗?如果没有,为什么要使用它?
  • 它不会将 wikitables 转换为 html,但会转换其余部分。我需要在此处添加该功能,以便它也可以转换wikitables。
  • 哦,好的。告诉我们你需要什么——一个正则表达式和一个替换函数,或者其他什么——这样我们可以专注于问题而不是在开始之前解析整个库不是更好吗?
  • 我只需要一个正则表达式函数来解析 wikitables。就是这样。
  • 哦,好的。 “在这个文件中使用正则表达式”让我失望。听起来我们根本不需要担心那个文件......需要捕获哪些功能?我们有一个例子,但语法如何适用于 wikitable?又应该如何翻译成 HTML?也许只是帖子中示例的 HTML 就足够了。

标签: javascript html regex regex-negation


【解决方案1】:
  • 查找表
    • 查找每一行
    • 如果该行有= 将其存储为表属性
    • 如果行的开头有!,则呈现标题行
      • 获取并呈现每个标题
    • 否则是正常行
      • 获取并渲染每个单元格
  • 渲染表格:将所有部分放在一起,然后返回

https://jsfiddle.net/n1dp3fcs/2/

var attrs = "", headers = "", rows = "";
function renderTables(wiki) {
  wiki.replace(findTable, parseTable);
  var HTML = "<table" + (attrs ? " " + attrs : "") + ">" +
    (headers ? "<thead>" + headers + "</thead>" : "") +
    (rows ? "<tbody>" + rows + "</tbody>" : "") +
  "</table>";
  attrs = headers = rows = "";
  return HTML;
}

var findTable = /\{\|\s*(.*?)\s*\|\}/g,
    parseTable = function(match, content) {
      Array.prototype.forEach.call(content.split(newRow), renderRow);
    };

var newRow = /\s*\|-\s*(?:\|\s*)?/g,
    renderRow = function(content) {
      console.log("tr", content, arguments);
      if (content.indexOf("=") !== -1) { console.log("attrs"); attrs += content; }
      else if (content[0] === "!") { console.log("th"); headers += "<tr>" + content.replace(findHeader, renderHeader) + "</tr>"; }
      else { console.log("td"); rows += "<tr>" + content.replace(findCol, renderCol) + "</tr>"; }
    };

var findHeader = /\s*!\s*([^!]+?)(?=\s*!|$)/g, renderHeader = "<th>$1</th>";

var findCol = /(?:^\s*|\s*\|\s*)([^\|]+?)(?=\s*\||$)/g, renderCol = "<td>$1</td>";

【讨论】:

  • 效果很好。但是有一个问题,我没有正确编写wikitext的表格代码。我已经更新了它。能复查吗?另外,如果我可以将此代码添加到此(goessner.net/download/prj/wiky/wiky.js)中,有没有办法?
  • 试试看。我真的不能花几个小时弄清楚那个文件是如何工作的。您可以随时与制作它的人取得联系,并询问他是否愿意添加它。我的名字是 Thomas Giles,GitHub: wthit56 如果他可以信任我的话。或者你可能只是问他是否可以将他的表格渲染代码修复到新版本或那里发生的任何事情。
  • 基本上,我刚刚为您免费完成了大量工作。提醒一下,这个论坛更多的是用来提问,而不是让人们为你编写整段代码,然后在别人的库中重新实现它。你有点幸运,我只是觉得这些东西很有趣,但我不会看别人的代码并在我的工作中拼接。
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 2016-09-20
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 2013-01-02
  • 2015-10-14
  • 2011-01-04
相关资源
最近更新 更多