You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Anki输入框脚本优化:让带括号文本的两种输入均判定为正确

问题:Anki输入框支持带括号的两种正确答案判定

现有自定义Anki输入框的脚本,当正确答案为(text1) text2格式时,需要同时允许输入text1 text2或text2都被判定为正确。当前的正则处理只能支持其中一种情况,需要调整逻辑实现双判定。

解决方案

核心思路是从原正确答案中生成两种有效答案格式,并将它们都加入到备选答案数组中,这样两种输入都能匹配成功。

修改代码步骤

替换原脚本中从var corr = document.getElementById('correctAnswer');到if (!array.includes(correctAnswer)) { array.push(correctAnswer); }的部分,替换为以下代码:

var corr = document.getElementById('correctAnswer');
var str2 = corr.innerHTML;

// 生成两种正确答案格式
// 格式1:保留括号内内容并去掉括号,得到"text1text2"
var correctWithParenContent = str2.replace(/[()]/g, '').replace(/[^\w,éôëçñï]/g, '').replace(/\s/g, '');
// 格式2:移除括号及内部内容,得到"text2"
var correctWithoutParen = str2.replace(/\([^)]*\)/g, '').replace(/[^\w,éôëçñï]/g, '').replace(/\s/g, '');

// 处理备选答案
var getalt = document.getElementById('altmean');
var altmean = getalt.innerHTML.replace(/(\([^)]*\))/g, '').replace(/[^\w,éôëçñï]/g,' ');

// 将两种正确格式都加入备选列表
altmean += ", " + correctWithParenContent + ", " + correctWithoutParen;

var array = altmean.split(",").map(function(item) {
  return item.trim();
});

逻辑说明

  1. 生成两种正确答案:
    • correctWithParenContent:去掉所有括号,保留括号内的内容并和外部内容合并,对应输入text1 text2的情况
    • correctWithoutParen:直接移除括号及内部所有内容,对应输入text2的情况
  2. 将这两个版本都追加到备选答案字符串中,最终通过split和map处理后,两种格式都会被加入到匹配数组里
  3. 后续的大小写转换、空白字符清理逻辑保持不变,确保输入的大小写、空格不影响判定

完整修改后的脚本(关键部分已更新)

function main() {
//Script for modifying 'Show Answer' behavior for Input types.
var htmlTextNodes = [];
var innerHTMLText = [];
if (!document.getElementById('typeans')) {
  return;
}
var htmlNodeLength =document.getElementById('typeans').childNodes.length;
var typedAnswer;
var correctAnswer;
var firstBr = null;
var secondBr;

//capture each node to array
for (i = 0; i < htmlNodeLength; i++) {
 
 htmlTextNodes[i] = document.getElementById('typeans').childNodes[i];
 innerHTMLText[i] = document.getElementById('typeans').childNodes[i].innerHTML;
 //locate <br> tags for output change markers
 if (document.getElementById('typeans').childNodes[i].nodeName == "BR") {
  console.log("Runs if BR");
  if (firstBr != null) {
   secondBr = i;
  } else {
   firstBr = i;
  };
 };
};

//If answer is correct, firstBr will still be null, so must set to length of typeans.childNode
if (firstBr == null) {
 firstBr = htmlNodeLength;
};

//assemble typed and correct answer strings
str2 = innerHTMLText.slice(0,firstBr).join("");
var typeParse = str2.replace(/[^\w,éôëçñï]/g,' ');
var typedAnswer = typeParse.replace(/\s/g, '');
var typedAnsDis = str2.replace(/[^a-zA-Z0-9,éôëçñï]/g,' ');
var typedUpper = typedAnswer.toUpperCase();

// 以下为修改后的核心代码
var corr = document.getElementById('correctAnswer');
var str2 = corr.innerHTML;

// 生成两种正确答案格式
// 格式1:保留括号内内容并去掉括号,得到"text1text2"
var correctWithParenContent = str2.replace(/[()]/g, '').replace(/[^\w,éôëçñï]/g, '').replace(/\s/g, '');
// 格式2:移除括号及内部内容,得到"text2"
var correctWithoutParen = str2.replace(/\([^)]*\)/g, '').replace(/[^\w,éôëçñï]/g, '').replace(/\s/g, '');

// 处理备选答案
var getalt = document.getElementById('altmean');
var altmean = getalt.innerHTML.replace(/(\([^)]*\))/g, '').replace(/[^\w,éôëçñï]/g,' ');

// 将两种正确格式都加入备选列表
altmean += ", " + correctWithParenContent + ", " + correctWithoutParen;

var array = altmean.split(",").map(function(item) {
  return item.trim();
});

// 后续处理保持不变
for ( var i = 0; i < array.length; i++ ) {
    array[i] = "" + array[i].toUpperCase() + "";
    array[i] = "" + array[i].replace(/[/\W, " "]/g,' ');; + "";
    array[i] = "" + array[i].replace(/\s/g, ''); + "";
}

//Modify answer output
if ((array.indexOf(typedUpper) > -1) &&  (!(typedUpper == "" ))) {
 var c = "<div class=\"animated zoomIn\" id='correct'>"+typedAnsDis+"</div>";
 var d = document.getElementById('typeans');
 d.innerHTML =  c;
} else {
if(typedAnsDis == "") {
 var g = "<div class=\"animated shake\" id='empty'>{{Meaning}}"+typedAnsDis+"</div>";
 var h = document.getElementById('typeans'); 
 h.innerHTML =  g;
const div = document.getElementById('empty');
div.innerHTML = div.textContent.split('').filter(char => /^[A-Za-z\s\.,;!?\"'-~-éū]+$/.test(char) && !/[^\x00-\x7F]/.test(char)).join('');
} else {
 var e = "<div class=\"animated  flash\" id='incorrect'>"+typedAnsDis+"</div>";
 var f = document.getElementById('typeans');
f.innerHTML =  e;
}
}
};
main();

内容的提问来源于stack exchange,提问作者Its-a Me Raphael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:27:54