Teilstring aus Textfeld über Regulären Ausdruck extrahieren
Emanuel
- javascript
Hallo !
In einem Textfeld sind Vor- und Zuname eingetragen.
Das Textfeld ist über Reguläre Ausdrücke bereits soweit vorformatiert, das keine weiteren Zeichen außer Buchstaben, Bindestrichen und Leerzeichen
vorkommen dürfen; Doppelte Leerzeichen sowie Leerzeichen und Bindestriche am Anfang und am Ende des Stings sind ebenfalls ausgeschlossen.
Ich möchte nun den Vornamen aus dem String extrahieren und habe dann versucht, die Position des ersten Leerzeichens zu ermitteln, um dann z.B. mit der Methode splitText(Position) den String am Leerzeichen in die Teilstings Vor- und Zuname aufzuteilen.
Mein erster Regulärer Ausdruck dazu war:
reg = /\s/G;
Suche nach einem Leerzeichen und liefere über Flag G die Position dieses Zeichens zurück.
Mein zweiter Versuch, den Vornamen selbst zu "erwischen" war:
reg = /^.*\b/;
Suche am Anfang des Strings nach beliebigen Zeichen - beliebig oft wiederholt - bis zur Wortgrenze.
Vorausgesetzt, die Regulären Ausdrücke sind so richtig formuliert, fehlt mir anscheinend eine geeignete Methode, die Position des trennenden Leerzeichens, die erste Wortgrenze oder den Vornamen selbst bei einem Treffer auch auszugeben.
Weiß jemand Rat, wie ich das Problem angehen und lösen kann ?
Mit Grüßen Emanuel
"Brigitte Musterfrau".http://de.selfhtml.org/javascript/objekte/string.htm#search@title=search(/\s/)
=> 8
Wüsste aber nicht, wozu du das brauchst, wenn du doch offenbar einfach folgendes suchst:
"Brigitte Musterfrau".http://de.selfhtml.org/javascript/objekte/string.htm#match@title=match(/[1]+/)
=> [ "Brigitte" ]
Das ist ein Array mit einem Element.
Mathias
^\s ↩︎
Danke Mathias. Manchmal schämt man sich posthum für seine Frage. (Schäm!)
Habe auch eine "Lösung" gefunden, die ich präsentieren wollte, um mich wenigstens teilweise zu rehabilitieren:
wert = textfeld.value;
reg = new RegExp(' ');
if (reg.test(wert)
vorname = RegExp.leftContext;
Werde mich aber an Deine Lösung halten ...
Mfg Emanuel
reg = new RegExp(' ');
Ziemlich umständliche Schreibweise, man kann auch einfach / / schreiben.
Noch was zu /\s/G: Es gibt keinen G-Flag, aber einen g-Flag für "global match". Was an der Stelle keinen Unterschied macht, jedenfalls hilft der einem nicht dabei, die Position des gefundenen Zeichens zu finden. /\s/G müsste einen Syntaxfehler erzeugen.
Und zu /^.*\b/: Der Punkt darf natürlich nicht mit \ maskiert sein. Außerdem wird dieser (korigierte) Ausdruck nicht funktionieren, weil .* greedy (gierig) ist. Dieser Teilausdruck schluckt soviele Zeichen wie möglich (also den ganzen Namen) und bricht nicht beim ersten Nicht-Wort-Zeichen (\b) ab. Dazu müsste man /^.+?\b/ verwenden. Mit .+ mindestens ein Zeichen, aber durch das ? dahinter nicht gierig, sodass nur "Brigitte" gefunden wird.
if (reg.test(wert)
vorname = RegExp.leftContext;
leftContext ist Netscape JavaScript, seit Version 1.5 missbilligt, weil nicht in ECMAScript standardisiert und i.d.R. schlicht nicht benötigt. Ob das alle Browser unterstützen, kann daher bezweifelt werden.
Mathias
Hi,
Ich möchte nun den Vornamen aus dem String extrahieren und habe dann versucht, die Position des ersten Leerzeichens zu ermitteln, um dann z.B. mit der Methode splitText(Position) den String am Leerzeichen in die Teilstings Vor- und Zuname aufzuteilen.
So einfach ist es aber nicht.
Was machst du mit Leuten, die mehr als einen Vornamen angeben?
Weiß jemand Rat, wie ich das Problem angehen und lösen kann ?
Ein Feld fuer Vornamen, ein Feld fuer Nachnamen.
MfG ChrisB
:-))
Danke für den Hinweis: "Hans Hermann", "Marie Louise" und "Klaus Dieter" werden wohl in diesem Fall damit leben müssen, dass man sie nur mit ihrem Rufnamen anspricht.
In dem hier vorliegenden Fall wird aus diesem Problem ausnahmsweise kein Problem entstehen - soweit kann ichs überschauen ...
Mfg Emanuel
[latex]Mae govannen![/latex]
Danke für den Hinweis: "Hans Hermann", "Marie Louise" und "Klaus Dieter" werden wohl in diesem Fall damit leben müssen, dass man sie nur mit ihrem Rufnamen anspricht.
Was ist mit "Eduard von SELFingen" Der kann auf keinen Fall seinen Namen angeben, genausowenig wie "Christiane O'SELFing".
Cü,
Kai