Siechfred: Reguläre Ausdrücke - Leerzeichen entfernen

Beitrag lesen

Hallo Leif.

Insbesondere die Aufgabe von "$1" und "$2" ist mir ein Rätsel.

Mit Hilfe der Klammern kannst du bis zu 10 Teilausdrücke zwischenspeichern, die man durch $n ansprechen kann.

Kannst Du mir im Klartext auf die Sprünge helfen ?

Ich versuche es mal.

foo.replace(/^(\s*)(.*)$/,'$2');

Am Anfang steht das Hütchen "^", ein so genannter Anker, der heißt, dass der Suchtext mit dem folgenden Muster beginnen muss. Weiter musst du wissen, dass "\s" für Whitespace steht. das Sternchen "*" ist ein Quantifier, der bedeutet, dass das davor stehende Zeichen gar nicht oder beliebig oft vorkommen darf. Dann musst du wissen, dass der Punkt "." für ein beliebiges Zeichen, das kein Zeilenumbruch ist, steht, hier wiederum gefolgt vom Sternchen - das hatten wir schon. Schließlich noch der Anker "$", der bedeutet, dass der Suchtext mit dem davor stehenden Muster enden muss.

Jetzt lies den Ausdruck so:

/      ^                (\s*)                          (.*)                                 $               /
/beginne mit beliebig vielen Leerzeichen, danach beliebig viele andere Zeichen, bis der Suchtext zu Ende ist/

Die Klammerung bewirkt, dass du die beliebig vielen Leerzeichen in $1 und die beliebigen anderen Zeichen in $2 gespeichert hast.

oa.replace(/^(.*?)(\s*)$/,'$1');

Den kannst du dir dann selber erklären ;-)

Btw, ein Regulärer Ausdruck wäre im Beispielsfall ausreichend:

foo.replace(/^\s+(.+?)\s+$/,'$1');

würde auch 'nix' liefern ;-)

Zur Erklärung:
Der Quantifier "+" sucht nach einem oder mehreren Vorkommen des davor stehenden Zeichens, der Quantifier "?" fragt bei jedem gefundenen Zeichen ab, ob es nicht bereits auf das folgende Zeichen passt, wenn ja, wird mit dem nächsten Zeichen des Musters weitergesucht. Der oben stehende RegEx funktioniert natürlich nur, wenn innerhalb des Wortes keine Leerzeichen vorkommen.

Grüße
Siechfred

PS: http://www.rrz.uni-hamburg.de/RRZ/W.Wiedl/Skripte/CGI-Perl/Regulaere_Ausdruecke/index.html