JavaScript substring() Stopp bei "A-Z"

rocket81

Lt. Commander
Registriert
Dez. 2007
Beiträge
1.054
Hi,
ich arbeite gerade mit "substring()" und stehe vor einem kleinen Problem.
"Substring" soll aus einer Zeichenkette alles bis zu einem Bestimmten Buchstaben extrahieren.
Dabei handelt es sich um Zahlen, deshalb kann man sagen, dass Substring extrahieren soll bis "er" auf einen Buchstaben trifft.
Wenn ich jetzt extrahieren lasse bis "indexOf("P")" , also bis zum Buchstaben "P" funktioniert das, aber wie kann ich extrahieren lassen bis eines von verschiedenen Zeichen oder Buchstaben kommt?
Also nach dem Motto "indexOf([A-Z])"...
Ich hoffe ihr versteht was ich meine.
gruß
danke
 
Zuletzt bearbeitet:
ich würd mir dazu einfach eine indexOfAny funktion basteln. in etwa so (ungetestet):
Code:
function indexOfAny( Find, String )
{
  for( var i = 0; i < Find.length; i++ )
  {
    var pos = String.indexOf( Find[i] );
    if( pos != -1 )
      return pos;
  }
  return -1;
}

function lastIndexOfAny( Find, String )
{
  for( var i = 0; i < Find.length; i++ )
  {
    var pos = String.lastIndexOf( Find[i] );
    if( pos != -1 )
      return pos;
  }
  return -1;
}
du übergibst halt eine zeichenkette von zeichen die du suchst und den string. in der schleife wird dann jedes zeichen durchgegangen und wenn eines gefunden wurde, wird die position zurückgegeben.

aufruf wäre dann z.b. so:
Code:
var FindString = '19239123A1238';
var pos = indexOfAny( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', FindString );
 
Das müsste doch auch mit Regular Expressions gehen, oder?
 
Richtig, das geht auch mit regexp - imho sogar um einiges einfacher / eleganter ;)

Code:
<script type="text/javascript">
var a = "19239123A1238";
var b = a.replace(/^([\d]*).*$/, '$1');
alert(b);
</script>

Was ist den das Ziel? Wenn du die Buchstaben und anschließenden Zahlen auch benötigst solltest anstelle von replace einmal match näher anschauen...

http://de.selfhtml.org/javascript/objekte/string.htm#match

Code:
<script>
var a = "19239123A1238";
var m = a.match(/^([\d]*)([a-z]*)([\d]*)$/i);
var left = m[1];
var chr = m[2];
var right = m[3];
alert(left + ' - ' + chr + ' - ' + right);
</script>
 
Zuletzt bearbeitet:
Ziel ist es einen Bestimmten Teil eines Strings zu extrahieren.
Dieser Teil beginnt nach einem festgelegten String (dieser Teil funktioniert), besteht aus Zahlen und endet sobald der nächste Buchstabe auftaucht.
PHP:
vargesucht = vargesamt.substring(vargesamt.indexOf("String") + 6, vargesamt.indexOf("NächsterBuchstabe"));
"NächsterBuchstabe" kann dabei allerdings variieren.
PHP:
vargesucht = vargesamt.substring(vargesamt.indexOf("String") + 6, vargesamt.indexOf(/[A-Z]/));
Müsste ja theoretisch funktionieren, doch er sucht definitiv nicht den richtigen String raus, wenn ich jetzt an einem Beispiel "NächsterBuchstabe" als "P" festlege und statt "/[A-Z]/" "P" einfüge funktioniert alles. :S
 
geb mal ein beispiel des strings von dem du einen Teilstring brauchst.

diese verschachtelten substrings führen zwar zur lösung aber imho würde dich ein simpler regexp ans ziel bringen ;)

Wenn ich das richtig sehe schaut dein string folgendermaßen aus:

String123456[ab hier irgendwelche Buchstaben von A-Z], richtig ?

Wenn ja machs folgendermaßen:
Code:
var s = "String123456P";
var m = s.match(/^String([\d]*)[A-Z]*/);
var zahl_die_du_suchst = m[1];
 
Zuletzt bearbeitet:
Ja das Problem dabei ist, dass sowohl die Zahl als auch der Buchstaben dahinter variieren können. :/

EDIT: Und warum funktioniert die Version mit den regular Expressions nich? :O
 
hast du mal den code den ich gepostet hab ausprobiert?
Dort spielt es keine Rolle was für Buchstaben nach der gesuchten Zahl folgen und wie viele Stellen die Zahl hat.

Wenn die Buchstaben auch Kleinbuchstaben sein können solltes du es folgendermaßen ändern:
Code:
var m = s.match(/^String([\d]*)[A-Z]*/i);
bzw
Code:
var m = s.match(/^String([\d]*)[A-z]*/);


edit:
öhm ja sry. hatte die Variable mit dem String s genannt und beim match auf die variable a überprüft. kommt vom code blind tippen ohne zu prüfen ;)
 
Zuletzt bearbeitet:
Okay, ich poste mal einen Beispiel String...

PHP:
varstring = "erstertext11text27letztertext";

Nun geht es darum sowohl 11, 27 als auch leztertext in verschiedenen Variablen zu speichern...
Ergänzung ()

Keiner ne Idee?
Zudem variiert die Länge und der Inhalt der einzelnen "Teilstrings"...
Wäre wirklich wichtig für mich dieses Problem zu lösen...
 
falls das thema noch aktuell ist:

Code:
<script>
varstring = "erstertext11text27letztertext";  
var m = varstring.match(/^[a-z]*([\d]*)[a-z]*([\d]*)([a-z]*)$/i);
alert(m[1]+' '+m[2]+' '+m[3]);
</script>

oder etwas dynamischer:

Code:
<script>
varstring = "erstertext11text27letztertext";  
while ((m = varstring.match(/^[a-z]{0,}([\d]{1,})(.*)$/i)) != null)  {
	alert(m[1]);
	if (/^[a-z]*$/i.exec(m[2])) {
		alert(m[2]);
		break;
	} else {
		varstring = m[2];
	}
}
</script>

Meines wissens gibt es in javascript keine funktion wie z.B. die php Funktion preg_match_all, daher der weg über die Schleife.

Ich empfehle dir dich mal in reg_exp einzulesen ;)
 
Zuletzt bearbeitet:
Zurück
Oben