fix(exam): 修复多选题带内容格式答案解析问题
Some checks failed
continuous-integration/drone/push Build is failing

- 增加对 'A:内容,B:内容,C:内容' 格式的支持
- 使用正则 /[A-Da-d](?=[::])/g 提取所有选项字母
This commit is contained in:
yuliang_guo
2026-01-28 14:04:36 +08:00
parent 22d8534fdf
commit 55438b85c6

View File

@@ -355,12 +355,12 @@ const transformDifyQuestions = (difyQuestions: any[]): any[] => {
correctLetters = correctAnswerStr.match(/[A-Da-d]/g)?.map(l => l.toUpperCase()) || [] correctLetters = correctAnswerStr.match(/[A-Da-d]/g)?.map(l => l.toUpperCase()) || []
console.log(` ✓ 匹配情况1(纯字母): correctLetters=[${correctLetters.join(',')}]`) console.log(` ✓ 匹配情况1(纯字母): correctLetters=[${correctLetters.join(',')}]`)
} else { } else {
// 情况2选项字母+内容格式(如 "Axxx" 或 "A: xxx" 或 "A:xxx" // 情况2选项内容格式(如 "A分组列,B聚合函数,C常量"
// 支持多种冒号格式:中文全角冒号、英文冒号 // 匹配所有 "X" 或 "X:" 格式,提取字母
const prefixMatch = correctAnswerStr.match(/^([A-Da-d](?:[,、\s]*[A-Da-d])*)\s*[:]\s*/) const multiOptionMatch = correctAnswerStr.match(/[A-Da-d](?=[:])/g)
if (prefixMatch) { if (multiOptionMatch && multiOptionMatch.length > 0) {
correctLetters = prefixMatch[1].match(/[A-Da-d]/g)?.map(l => l.toUpperCase()) || [] correctLetters = multiOptionMatch.map(l => l.toUpperCase())
console.log(` ✓ 匹配情况2(字母+冒号): prefixMatch="${prefixMatch[0]}", correctLetters=[${correctLetters.join(',')}]`) console.log(` ✓ 匹配情况2(多选项带内容): correctLetters=[${correctLetters.join(',')}]`)
} else { } else {
// 情况3只有开头字母如 "A" 后面直接跟非字母内容) // 情况3只有开头字母如 "A" 后面直接跟非字母内容)
const firstLetterMatch = correctAnswerStr.match(/^([A-Da-d])(?![A-Za-z])/) const firstLetterMatch = correctAnswerStr.match(/^([A-Da-d])(?![A-Za-z])/)