Problem mit RegExp
Tom Collins
- javascript
Hallo Leute,
ich möchte aus einem String alle Sonderzeichen kopieren und habe folgendes Script geschrieben:
<html>
<head>
<title>RegExp-Test</title>
</head>
<body>
<script type="text/javascript">
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);
</script>
</body>
</html>
Nach meinem Verständnis müsste trefferListeJoin so aussehen:
"- /"
Sieht aber so aus:
"- -"
Kann mir jemand sagen, wo mein Denkfehler liegt?
Vielen Dank und Grüße von Tom
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
Hallo Joachim und peterS,
vielen Dank für das Kopfgeraderücken, jetzt habe ich den Fehler begriffen.
Viele Grüße von Tom C.
Falls es Euch interessiert:
Hier die fertige Funktion (ich weiß, kein Javascript für Basis-Funktionalität, man könnte den Quelltext auch noch deutlich kürzen - aber es war eine schöne Übung für eine Seite ohne Serverscripte). Aufgabe war es, aus schrägen Formulareingaben etwas zu machen, was ein _Mensch_ auf den ersten Blick versteht und was ohne großen Aufwand aus einer E-Mail in eine Exceltabelle kopiert werden kann:
hANS-herrmann -> Hans-Herrmann
MEIER-mÜLLER -> Meier-Müller
mosel-saar-ruwer-bürger-steig 12 ->Mosel-Saar-Ruwer-Bürger-Steig 12
ort-OSTORT/wÜmMe -> Ort-Ostort/Wümme
// string CaseCorrect(string stringToCorrect)
function CaseCorrect(sendedTerm){
var myTerm = '';
var mySplitTerms = sendedTerm.split(/[^a-zA-ZäöüÄÖÜß0-9]/);
var i = 0;
var myFirst = '';
var myRest = '';
var myRegExp = /[^a-zA-ZäöüÄÖÜß0-9]+/g;
var trefferListe = sendedTerm.match(myRegExp);
for (i = 0; i < mySplitTerms.length; i++) {
myFirst = mySplitTerms[i].substr(0,1);
myRest = mySplitTerms[i].substr(1,mySplitTerms[i].length-1);
myFirst = myFirst.toUpperCase();
myRest = myRest.toLowerCase();
myTerm = myTerm + myFirst + myRest;
if (trefferListe) {
if (i < trefferListe.length) {myTerm += trefferListe[i];}
}
}
return myTerm;
}
Grüße von Tom C.
Hi,
var myRegExp = /([^a-zA-ZäöüÄÖÜß0-9])/g;
var trefferListe = myRegExp.exec("Dorf-Ostdorf/Rhur");
der Ausdruck passt hier als erstes auf "-". In trefferListe[0] steckt der match, in trefferListe[1] der Inhalt der ersten Klammer - beide Male also "-".
Gruesse Joachim