// 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 }; }); }