javascript 从HTML字符串中删除空列

xxhby3vn  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(146)

我编写了从str变量中删除表中空行的代码。
我需要帮助从str的表中删除空列。
请注意,表格中每行的单元格数量可以不同。所有列都应从字符串中删除

let str =
  `<head></head><body><h1>table 1</h1><table><thead><tr><th><p>a1</p></th><th></th><th><p>a3</p></th><th><p>a4</p></th><th></th></tr><tr><th>b1</th><th></th><th><p>b3</p></th><th colspan="2"><p>b4</p></th></tr><tr><th>c1</th><th></th><th>c3</th><th>c4</th></tr></thead><tbody><tr><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td></tr><tr><td><p>f1</p></td><td></td><td></td><td><p>f4</p></td><td>f5</td></tr></tbody></table><p>lorem table</p><h2>table 2</h2><table><thead><tr><th><p>a1</p></th><th></th><th><p>a3</p></th><th><p>a4</p></th><th></th></tr><tr><th>b1</th><th></th><th><p>b3</p></th><th colspan="2"><p>b4</p></th></tr><tr><th>c1</th><th></th><th>c3</th><th>c4</th></tr></thead><tbody><tr><td></td><td></td><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td></tr><tr><td><p>f1</p></td><td></td><td></td><td><p>f4</p></td><td>f55</td></tr></tbody></table></body>`
  
const emptyCellRegex = /<(t[dh])>(\s*?)<\/\1>/g;
let tableTags = str.match(/<table.*?<\/table>/gs);
let isEmptyCol = true
let t, r, c = 0
let isEmptyRow = true
let isEmptyCell;

for (t = 0; t < tableTags.length; t++) {
  let tableTag = tableTags[t]
  let trTags = [];

  const matches = tableTag.match(/<tr.*?<\/tr>/gs);
  if (matches) {
    trTags.push(...matches);
  }

  // delete rows
  for (r = 0; r < trTags.length; r++) {
    let trTag = trTags[r];
    let tdTags = []; // include th and td tags

    const matches = trTag.match(/<(td|th).*?<\/(td|th)>/gs);

    if (matches) {
      tdTags.push(...matches);
    }

    for (c = 0; c < tdTags.length; c++) {
      let tdTag = tdTags[c];
      emptyCellRegex.lastIndex = 0; // reset the search position

      isEmptyCell = emptyCellRegex.exec(tdTag) !== null
      if (!isEmptyCell) {
        isEmptyRow = false;
      }

    }
    if (isEmptyRow) str = str.replace(trTag, '');
    isEmptyRow = true
  }
}
/// -end- delete rows

// Remove columns...

console.log("str: ", str)
toe95027

toe950271#

在代码中循环trTags并使用emptyCellRegex检查空单元格的部分,可以为标记创建另一个正则表达式并循环它们,同时保存空单元格的索引以及该索引在后续行中出现的次数。
在遍历它们之后,检查计数器是否等于trTags.length,这将指示您试图删除的列。
现在,您可以遍历trTags以删除正确的列

相关问题