我编写了从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)
1条答案
按热度按时间toe950271#
在代码中循环
trTags
并使用emptyCellRegex
检查空单元格的部分,可以为标记创建另一个正则表达式并循环它们,同时保存空单元格的索引以及该索引在后续行中出现的次数。在遍历它们之后,检查计数器是否等于trTags.length,这将指示您试图删除的列。
现在,您可以遍历
trTags
以删除正确的列