2017-01-17 2 views
-1

Ich versuche, eine Visualisierung zu erstellen, die nicht Interpunktionszeichen entfernt, aber die Kapitel in der Zeichenfolge weiterhin verfolgt.Entfernen Sie alles, was nicht mit Regex übereinstimmt

Bisher erreichte ich die folgende regex erstellen entsprechen, was ich erhalten will:

(\CAPÍTULO ([0-9]+))|([\\?.,:;!¡¿。、·*\(\)\[\]\-–\_«»\'\'\/@#$&\%\^=+\|<>\"])

Wie kann ich den Rest des Textes aus einer Zeichenfolge ersetzen tun?

+0

Können Sie ein Beispiel für Ein- und Ausgänge geben? –

+0

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? –

Antwort

0

Sie können die leicht verwenden replace Funktion, versuchen Sie dies für ein Beispiel:

var str = "whatever, string, you like!"; 
 
var newStr = str.replace(/\w/g, ' '); 
 

 
console.log(newStr);

+0

Das entspricht nicht den Anforderungen – jsdario

+0

@jsdario Ich aktualisierte die Antwort auf Ihre Anforderung –

+0

Dies wird 'CAPITULO 1' entfernen, die er behalten möchte. –

0

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.

+0

Dies scheint den "CAPITULO 1" -Teil zu entfernen, den er behalten möchte. –

+0

Versuchen Sie es jetzt - er hatte '\ C' im ursprünglichen Beitrag, und ich ließ es in.;) –

0

entfernt keine Interpunktionszeichen, behält aber die Kapitel in der Zeichenfolge.

Der klassische Weg, dies zu tun, ist, dass Sie (CAPITULO [0-9]+) an der Sache übereinstimmen halten wollen tun , OR (|) andere Dinge Sie nicht behalten wollen - in diesem Fall, Nicht-Interpunktionszeichen (\w), und erfassen Sie das, dann ersetzen Sie das letztere durch eine leere Zeichenfolge.

const regexp = /CAPITULO [0-9]+|(\w)/g; 
 

 
const input = "CAPITULO 22 .#(nonpunctuation characters $%&*'"; 
 

 
const processed = input.replace(regexp, (match, match1) => match1 ? '' : match); 
 

 
console.log(processed);

Wenn Sie wirklich alle Interpunktionszeichen zu erhalten auflisten möchten, dann ersetzen \w in der oben mit

[^\\?.,:;!¡¿。、·*()[\]\-–_«»'\/@#$&\%\^=+\|<>\"] 

Wenn Sie die Platzierung der erhalten wollen verbleibende Zeichen, dann ändern Sie die Ersatzfunktion zu

(match, match1) => match1 ? ' ' : match 
+0

Er hat eine bestimmte Regex von Zeichen zu bewahren. Außerdem möchte er die Zeichenpositionen beibehalten und nicht nur entfernen. –

Verwandte Themen