Voici mon code. Il est utilisé pour personnaliser la zone de saisie dans anki :
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(); //typedUpper = "KITTEN" var corr = document.getElementById('correctAnswer'); var str2 = corr.innerHTML; var correctParse = str2.replace(/[^\w,éôëçñï]/g,''); var correctAnswer = correctParse.replace(/\s/g, ''); //split alternative answers into array var getalt = document.getElementById('altmean'); var altmean = getalt.innerHTML.replace(/(\([^)]*\))/g, '').replace(/[^\w,éôëçñï]/g,' '); altmean += ", "; altmean += correctAnswer; var array = altmean.split(",").map(function(item) { return item.trim(); }); if (!array.includes(correctAnswer)) { array.push(correctAnswer);} 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();
Supposons que j'ai un texte comme "(text1) text2". Je veux trouver un moyen pour que le script considère à la fois "text1 text2" et "text2" comme la bonne réponse.
Je ne l'ai pas découvert jusqu'à maintenant
var correctParse = str2.replace(/(\([^)]*\))/g, '').replace(/[^\w,éôëçñï]/g,'');
Considérez uniquement "text2" comme la bonne réponse
var correctParse = str2.replace(/(\([^)]*\))/g, '').replace(/[^\w,éôëçñï]/g,'');
Seul "text1 text2" est considéré comme la bonne réponse. Je ne trouve pas de moyen de calculer correctement "text1 text2" et "text2" en fonction de ma saisie.
Essayez de faire correspondre l'intégralité de l'entrée /^...$/ avec un groupe de capture facultatif (?:...) ? Pour le texte1 qui peut apparaître ou non dans l'entrée...
Voirhttps://regex101.com/r/CulGff/1
>