- 修复E选项及更多选项显示带前缀问题 - 更新所有选项相关正则表达式
This commit is contained in:
@@ -349,21 +349,21 @@ const transformDifyQuestions = (difyQuestions: any[]): any[] => {
|
||||
// 更精确地提取正确答案字母(避免误提取选项内容中的字母)
|
||||
let correctLetters: string[] = []
|
||||
|
||||
// 情况1:纯选项字母格式(如 "A", "B", "A,B", "A、B", "A,B,C")
|
||||
const pureLetterMatch = correctAnswerStr.match(/^[A-Da-d]([,、\s]+[A-Da-d])*$/)
|
||||
// 情况1:纯选项字母格式(如 "A", "B", "A,B", "A、B", "A,B,C,D,E")
|
||||
const pureLetterMatch = correctAnswerStr.match(/^[A-Za-z]([,、\s]+[A-Za-z])*$/)
|
||||
if (pureLetterMatch) {
|
||||
correctLetters = correctAnswerStr.match(/[A-Da-d]/g)?.map(l => l.toUpperCase()) || []
|
||||
correctLetters = correctAnswerStr.match(/[A-Za-z]/g)?.map(l => l.toUpperCase()) || []
|
||||
console.log(` ✓ 匹配情况1(纯字母): correctLetters=[${correctLetters.join(',')}]`)
|
||||
} else {
|
||||
// 情况2:多选项带内容格式(如 "A:分组列,B:聚合函数,C:常量")
|
||||
// 匹配所有 "X:" 或 "X:" 格式,提取字母
|
||||
const multiOptionMatch = correctAnswerStr.match(/[A-Da-d](?=[::])/g)
|
||||
const multiOptionMatch = correctAnswerStr.match(/[A-Za-z](?=[::])/g)
|
||||
if (multiOptionMatch && multiOptionMatch.length > 0) {
|
||||
correctLetters = multiOptionMatch.map(l => l.toUpperCase())
|
||||
console.log(` ✓ 匹配情况2(多选项带内容): correctLetters=[${correctLetters.join(',')}]`)
|
||||
} else {
|
||||
// 情况3:只有开头字母(如 "A" 后面直接跟非字母内容)
|
||||
const firstLetterMatch = correctAnswerStr.match(/^([A-Da-d])(?![A-Za-z])/)
|
||||
const firstLetterMatch = correctAnswerStr.match(/^([A-Za-z])(?![A-Za-z])/)
|
||||
if (firstLetterMatch) {
|
||||
correctLetters = [firstLetterMatch[1].toUpperCase()]
|
||||
console.log(` ✓ 匹配情况3(开头字母): correctLetters=[${correctLetters.join(',')}]`)
|
||||
@@ -410,8 +410,8 @@ const transformDifyQuestions = (difyQuestions: any[]): any[] => {
|
||||
|
||||
// 提取选项内容(去掉 "A:" 或 "A:" 前缀)
|
||||
let content = optStr
|
||||
// 匹配 "A:xxx" 或 "A:xxx" 格式(支持中英文冒号)
|
||||
const contentPrefixMatch = optStr.match(/^[A-Da-d]\s*[::]\s*(.*)$/)
|
||||
// 匹配 "A:xxx" 或 "A:xxx" 格式(支持中英文冒号,支持A-Z所有字母)
|
||||
const contentPrefixMatch = optStr.match(/^[A-Za-z]\s*[::]\s*(.*)$/)
|
||||
if (contentPrefixMatch) {
|
||||
content = contentPrefixMatch[1].trim()
|
||||
}
|
||||
@@ -422,13 +422,13 @@ const transformDifyQuestions = (difyQuestions: any[]): any[] => {
|
||||
let letterSource = ''
|
||||
|
||||
// 1. 尝试从选项内容前缀提取(如 "A:xxx" 或 "A:xxx")
|
||||
const prefixMatch = optStr.match(/^([A-Da-d])\s*[::]/)
|
||||
const prefixMatch = optStr.match(/^([A-Za-z])\s*[::]/)
|
||||
if (prefixMatch) {
|
||||
optionLetter = prefixMatch[1].toUpperCase()
|
||||
letterSource = '内容前缀'
|
||||
}
|
||||
// 2. 尝试从 key 提取(如果 key 是单个字母 A-D)
|
||||
else if (key.match(/^[A-Da-d]$/)) {
|
||||
// 2. 尝试从 key 提取(如果 key 是单个字母 A-Z)
|
||||
else if (key.match(/^[A-Za-z]$/)) {
|
||||
optionLetter = key.toUpperCase()
|
||||
letterSource = 'key字母'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user