peterS.: Problem mit RegExp

Beitrag lesen

gruss Tom

Hallo Leute,

ich möchte aus einem String alle Sonderzeichen kopieren und habe folgendes Script geschrieben:
...
var myRegExp = /([^a-zA-ZäöüÄÖÜß0-9])/g;
var trefferListe = myRegExp.exec("Dorf-Ostdorf/Rhur");
var trefferListeJoin = trefferListe.join(" ");
alert(trefferListe.length + ' Elemente in ' + trefferListeJoin);
...
Nach meinem Verständnis müsste trefferListeJoin so aussehen:
"- /"
Sieht aber so aus:
"- -"

Kann mir jemand sagen, wo mein Denkfehler liegt?

Du benutzt die methode "RegExp.exec", welche ein suchmuster genau
   einmal ausfuehrt; Dein pattern sucht global nach genau einem zeichen,
   welches nicht den in der eckigen klammer angegebenen zeichen
   entspricht - durch verwendung der runden klammern speicherst
   Du das suchergebnis in "RegExp.$1", obwohl Du darauf nach
   "exec" gar nicht zugreifst;

das Du jetzt zweimal "-" liegt wahrscheinlich daran, dass Dir
   das pattern voellig korrekt das eine gewuenschte zeichen aus
   "[^a-zA-ZäöüÄÖÜß0-9]" zusammen mit noch einmal demselben zeichen
   aus RegExp.$1 zurueckgibt, was der verwendung der runden klammern
   geschuldet sein wird;

fuer Dein beispiel fuehrt die methode "exec" nur ueber umwege
   zum gewuenschten ziel, einfacher ist die verwendung der String-
   methode "match" zusammen mit einer kleinen korrektur an Deinem
   regulaeren ausdruck:

var myRegExp = /[^a-zA-ZäöüÄÖÜß0-9]+/g;
   // sucht folgen von sonderzeichen, die aus mindesten einem
   // zeichen bestehen "[...]+" und das ganze dann globel "g";
   var trefferListe = ("Dorf-Ostdorf/Rhur").match(myRegExp);
   // wendet den RegExp auf ein string-objekt an;
   // jede einzelne sonderzeichen-folge wird als eintrag in
   // einem array gespeichert, welches diese methode zurueckgibt;
   var trefferListeJoin;
   if (trefferListe) {
     trefferListeJoin = trefferListe.join(" ");
     alert(trefferListe.length + ' Elemente in ' + trefferListeJoin);
   } else {
     alert("keine treffer");
   }

jetzt erhaelst Du als ergebnis auch das gewuenschte "- /";

by(t)e by(t)e - peterS. - pseliger@gmx.net

--
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)