das meiste scheint mir mit Regulären Ausdrücken lösbar, die kannst du eigentlich aus deinen Anforderungen generieren.
Inhalte in Klammern ignorieren (IGNORE_BRACKETS)
var regexstring = answer.replace(/\(\w\)/,".*");
Die Reihenfolge der Wortbedeutungen ignorieren (IGNORE_ORDER)
Die solltest du eh einzeln prüfen und nicht als Block scheint mir
Es muss nur eine Wortbedeutung angegeben werden (ONE_ANSWER)
Siehe oben
Sonderzeichen ignorieren (IGNORE_SYMBOLS)
var regexstring = answer.replace(/[^NICHTSONDERZEICHEN]/,".?");
Und dann testest du eben gegen den erzeugten String. Wobei du ganz zu Anfang natürlich die Zeichen, die in regulären Ausdrücken eine Bedeutung haben escapen solltest. Ich wüsste nicht, dass JS dafür eine fertige Funktion hätte (wäre aber mal nett zu erstellen).
--
sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(