Regulärer Ausdruck für optionalen Text in Klammern
P粉949267121
P粉949267121 2024-02-03 21:45:26
0
1
492

Das ist mein Code. Es wird verwendet, um das Eingabefeld in Anki anzupassen:

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();

Angenommen, ich habe einen Text wie „(text1) text2“. Ich möchte eine Möglichkeit finden, dass das Skript sowohl „text1 text2“ als auch „text2“ als die richtige Antwort berücksichtigt.

Ich habe es bis jetzt nicht herausgefunden

var correctParse = str2.replace(/(\([^)]*\))/g, '').replace(/[^\w,éôëçñï]/g,'');

Betrachten Sie nur „text2“ als die richtige Antwort

var correctParse = str2.replace(/(\([^)]*\))/g, '').replace(/[^\w,éôëçñï]/g,'');

Nur „text1 text2“ gilt als die richtige Antwort. Ich kann aufgrund meiner Eingabe keine Möglichkeit finden, „text1, text2“ und „text2“ korrekt zu berechnen.

P粉949267121
P粉949267121

Antworte allen(1)
P粉156415696

尝试将整个输入 /^...$/ 与可选捕获组 (?:...) 进行匹配?对于可能会或可能不会出现在输入中的 text1...

str2.replace(/^((?:\([a-zA-Z0-9]+\)\s+)?[a-zA-Z0-9]+).*$/, $1)

参见https://regex101.com/r/CulGff/1

>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage