feat: 表格展示优化

This commit is contained in:
2026-05-23 01:49:15 +08:00
parent cc7125e681
commit a3b1fba3ea
18 changed files with 417 additions and 18 deletions
+36
View File
@@ -0,0 +1,36 @@
// app/utils/format.ts - 文本格式化工具
/**
* 将选项字符串从"字母在上、内容在下"的换行格式合并为"字母. 内容"的单行格式。
* 例如:
* 输入:`A.\n错\nB.\n对`
* 输出:`A. 错\nB. 对`
*/
export function formatOptions(options: string): string {
// 匹配类似 "A." 开头的选项标记,将其后紧跟的换行内容合并到同一行
return options.replace(/^([A-Za-z]\.)\s*\n\s*/gm, "$1 ");
}
/**
* 将选项字符串拆分为逐行结构,标记哪些行是正确答案。
* answer 按 # 分隔(多选),与选项正文做等值匹配(大小写不敏感)。
*/
export function getOptionLines(
options: string,
answer: string
): { text: string; isCorrect: boolean }[] {
const segments = answer
.split("#")
.map((s) => s.trim().toUpperCase())
.filter(Boolean);
return formatOptions(options)
.split("\n")
.filter((line) => line.trim())
.map((line) => {
const match = line.match(/^[A-Za-z]\.\s*(.*)/);
const content = match?.[1]?.trim().toUpperCase() ?? "";
const isCorrect = content !== "" && segments.includes(content);
return { text: line, isCorrect };
});
}
+1
View File
@@ -1,2 +1,3 @@
export * from "./clipboard";
export * from "./format";
export * from "./sortableTable";