我有一个网站,就像聊天网站.
我想自动检测列表和表格,并将其格式化为HTML代码。
例如给定的输入
令文本= 1. Pizza2. Burgers3. Tacos4. Sushi5. Pasta6. Fried chicken7. Ramen8. Curry9. Steak10. Ice cream
;将其转换为有序列表
设输出= <ol><li>Pizza</li><li>Burgers</li>...</ol>
;
和表的数据
令文本= | Rank | Game | |------|------------------------------| | 1 | The Witcher 3: Wild Hunt | | 2 | Grand Theft Auto V | | 3 | Portal 2 | | 4 | Half-Life 2 | | 5 | Overwatch | | 6 | Counter-Strike: Global Offensive | | 7 | Doom (2016) | | 8 | Dark Souls III | | 9 | Divinity: Original Sin II | | 10 | Stardew Valley |
;
转换成HTML代码。
注意,这不应删除列表或表格前后的任何文本,例如
let input =“嘿看看最流行的视频游戏为PC. 1.我的世界2. PUBG....”不应该删除嘿看看最流行的视频游戏为PC!!
我试过这个代码,但遗憾的是没有工作
function convertTextToHTML(text) {
const lines = text.split("\n");
let result = "";
let isTable = false;
let isList = false;
let tableHeaders = [];
for (let line of lines) {
if (line.startsWith("|") && line.endsWith("|")) {
isTable = true;
const cells = line.split("|").slice(1, -1);
if (tableHeaders.length === 0) {
tableHeaders = cells.map((cell) => `<th>${cell.trim()}</th>`);
result += "<table><thead><tr>" + tableHeaders.join("") + "</tr></thead><tbody>";
} else {
const tableCells = cells.map((cell) => `<td>${cell.trim()}</td>`);
result += "<tr>" + tableCells.join("") + "</tr>";
}
} else if (line.startsWith("*")) {
isList = true;
if (result.indexOf("<ul>") === -1) {
result += "<ul>";
}
result += "<li>" + line.slice(1).trim() + "</li>";
} else {
if (isTable) {
result += "</tbody></table>";
isTable = false;
tableHeaders = [];
}
if (isList) {
result += "</ul>";
isList = false;
}
result += line + "<br>";
}
}
if (isTable) {
result += "</tbody></table>";
}
if (isList) {
result += "</ul>";
}
return result;
}
1条答案
按热度按时间hwamh0ep1#
根据您确定如何区分字符串的 * 方式 ,即您将格式化为
table
还是ol
,您可以使用split
和regex
或特定字符串来输出匹配值的数组,然后可以在特定函数中格式化这些值。因此,如果您的字符串包含一个可以用作
.split
方法的 determining string 的 specific string,则在该字符串处拆分并创建一个可以迭代的数组,然后可以根据这些字符串的内容对它们进行求值和格式化。我的示例使用了一个
forEach
循环,该循环迭代一个节点的注解列表,然后使用一个条件检查每个节点的textContent
是否包含一个 * 特定的字符串 * 或 * 标识符 ,这些字符串或标识符将用于将这些 * 注解字符串 * 拆分为各自的部分,以便进一步格式化。我检查字符串是否包含一个竖线,后跟一个空格,后跟另一个竖线--〉| |
,例如,这在我构建和格式化表的方法中使用。因此我们可以在条件的这一部分中运行buildTable方法。同样的逻辑可以应用于orderedlist,它仅仅取决于如何你选择拆分这些字符串,以及***的意思是什么***和***方法***你用来实现你的格式化方案--〉| |
表格,然后在由空格|
包围的单个管道处拆分辅助字符串,等等。希望这能有所帮助。让我知道,如果有什么不清楚的代码或如果你正在寻找一个不同的结果来。