steffi: Regex: Nur bestimmte Zeichen ausgeben

Beitrag lesen

ich habe eine eingabe "Das ist ein test" und diese würde ich gerne alle Zeichen die ich nicht möchte weg machen.

Ich habe jetzt folgendes Probiert:

var text = "Das ist ein test";
var search = /([\w\d-_.]+)/g;


>   
> jedoch bekomme ich bei search.length immer 2 heraus  
  
Kann nicht sein, search ist ein RegEx-Objekt, das hat kein Attribut length.  
  
Hast du vielleicht eher etwas in der Richtung m = search.exec(text) ausprobiert und für m.length den Wert 2 bekommen?  
search.exec() liefert ein Feld, in dem an Position 0 der Textbereich steht, der auf das gesamte Muster passt. Auf den Positionen danach finden sich die geklammerten Teile.  
  
Du erhältst also in deinem Falle m.length == 2 und genau zwei Einträge: m[0] ist "Das" und, da du das gesamte Muster geklammert hast, folgt m[1] mit nochmals "Das".  
Nimmst du die runden Klammern aus deinem Muster raus, erhältst du ein Feld m mit nur einem Eintrag, m.length ist dementsprechend 1.  
  

> obwohl g ja dafür steht, dass er den ganzen String durchsuchen soll.  
  
Rufe search.exec() nochmals auf, dann bekommst du den nächsten Treffer, in deinem Falle m.length == 1, m[0] == "ist", m[1] == "ist". Der dritte und vierte Aufruf von search.exec() ergibt dann "ein" und "test", und beim fünften Aufruf erhältst du false zurück.  
  
  
Da du aber etwas ersetzen möchtest und nicht suchen, bis du bei search.exec() eh ziemlich verkehrt. text.replace(search, "") macht, was du möchtest (die runden Klammern sind auch hier überflüssig).  
  
  
Davon unabhängig: Willst du mit deinem Muster [\w\d-\_\.] \_alle\_ Zeichen von \d bis \_, oder meinst du eher \d, -, \_? Dann setze den Bindestrich ans Ende der Klasse, vor die schließende eckige Klammer. Der Bindestrich hat eine besondere Bedeutung, [a-z] heisst "a bis z", trifft also quasi das ganze Alphabet, nicht die drei Zeichen "a", "-", "z".