首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析wikitext表格HTML?

如何解析wikitext表格HTML?
EN

Stack Overflow用户
提问于 2016-07-26 23:21:10
回答 1查看 392关注 0票数 1

解析表的Wikicode是

代码语言:javascript
复制
{| 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中使用正则表达式将其解析为像<table> </table>这样的HTML格式

EN

回答 1

Stack Overflow用户

发布于 2016-07-28 00:11:27

  • Find
    • Find each
    • If该行将其存储为表属性
    • 如果该行的开头有< header

>D9,则呈现标题行

  • 获取并呈现每个表属性

代码语言:javascript
复制
- Otherwise, it's a normal row  
    - Get and render each cell

  • 渲染表:将所有片段放在一起,并返回

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

代码语言:javascript
复制
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>";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38593898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档