Try this:
var r = /(CAPÍTULO [0-9]+|[\\?.,:;!¡¿。、·*\(\)\[\]\-–\_«»\'\'\/@#$&\%\^=+\|<>\"])|(.)/g
var s = "[email protected]#123^&*XYZ;";
var p = s.replace(r, "$1");
// Result: "[email protected]#^&*;"
Erstens passt es alle Zeichen in der Gruppe 1 und alle Nicht-Übereinstimmungen fallen in die zweite Gruppe. Da das Ergebnis einer Gruppennummer (d. H. $ 1) leer ist, wenn es nicht gefunden wird, löscht dies effektiv alles außer den Übereinstimmungen der ersten Gruppe.
Wenn Sie die Platzierung der anderen Charaktere erhalten müssen Sie dies tun könnte:
var r = /(CAPÍTULO [0-9]+|[\\?.,:;!¡¿。、·*\(\)\[\]\-–\_«»\'\'\/@#$&\%\^=+\|<>\"])|(.)/g
var s = "[email protected]#123^&*XYZ;";
s.replace(r, "$1,").split(",");
// Result: ["", "", "", "!", "@", "#", "", "", "", "^", "&", "*", "", "", "", ";", ""]
Sie müssen nur die zusätzlichen ""
am Ende zu behandeln. ;) Dies funktioniert, weil anstatt mit nichts zu ersetzen, (d. H. "$1"
wird ""
für Nicht-Übereinstimmungen), das Komma (oder jedes Zeichen, das Sie wirklich wollen), verfolgt die Positionen. Sie können alles verwenden, wie s.replace(r, "$1~").split("~");
auch.
Können Sie ein Beispiel für Ein- und Ausgänge geben? –
Sind diese spezifischen Interpunktionszeichen Sie beibehalten möchten oder möchten Sie alle nicht alphanumerischen Zeichen beibehalten? Möchten Sie die Position der beibehaltenen Interpunktionszeichen beibehalten, die Nicht-Interpunktionszeichen durch Leerzeichen ersetzen oder das Ergebnis komprimieren? –