String "von hinten" abschneiden

nimenn

Mitglied
Moin, moin

Ich würde gerne eine Variable, genauer jeden Wert innerhalb eines Arrays um
die letzten 9 Zeichen kürzen. Mit substr() und substring() kann ich aber nur
"von vorne" suchen.

Gibt es eine Methode bei Javascript, die das Ganze "von hinten" indexiert?

Ciao
nimenn
 
Moin, moin

Ich hätte noch eine Folgefrage. Wie bekomme ich
einen eleganten match() so hin, daß es mir in mein
z Array alle Übereinstimmungen schreibt?

Code:
function abgleich() {
	    	
	    var x = document.Formular.distlist_t.value.toLowerCase();
		var y = document.Formular.sendlist_t.value.toLowerCase();
		var y = y.split(";"); 
		y.sort();

			for (var i = 0; i < y.length; ++i) {
			sendcut = y[i]
			sendcut = sendcut.substring(0,sendcut.length-9);
		    var z = x.match (sendcut);    /* Diese Zeile steht nur symbolisch so da. Ich weiss, dass sie in dieser Form Schmarn ist, aber sie soll meine Frage verdeutlichen */
			}
			
                                      	        
			if(z)                               
            for(j=0;j<z.length;++j)
            alert(z[j]);                   	
		}

Die Daten im String X könnte ich ebenfalls mit Split in ein Array schreiben und dann die beiden Arrays gegeneinander abgleichen, aber es sollte doch eine elegantere und kürzere
Möglichkeit geben.

Ciao
nimenn
 
Leider hat sich mir durch deinen Post noch nicht so ganz erschlossen, was du eigentlich willst.

Egal, exec() statt match() liefert ein Array mit allen Treffern zurück.
 
Moin, moin

Ich bekomme zweimal Daten im folgenden Format:

Daten 1: blabla; blubb; lalala
Daten 2: lilili 12345678; test 12345678; blubb 12345678

Was ich letztlich haben möchte ist eine Ausgabe der übereinstimmenden,
bzw. auch der nicht übereinstimmenden Daten also:

Ausgabe 1: blubb
Ausgabe 2: blabla; lalala
Ausgabe 3: lilili; test

Ciao und Danke für dein Interesse
nimenn
 
Also ich würd's ja so in der Art machen:
Code:
var	frm = document.Formular,
         x = frm.distlist_t.value.toLowerCase().replace(/\s/g,'').split(';'),
         y = (frm.sendlist_t.value.toLowerCase()+';').replace(/(\s[a-z0-9]{8}(?=\;))|\s/g,''),
         ausgabe = new Array(new Array(),new Array(),new Array());
         
 for (i in x) {
  	j = y.match(x[i]) ? 0 : 1;
  	ausgabe[j][ausgabe[j].length] = x[i];
  	y = y.replace(x[i]+';','');
  }
 ausgabe[2] = y.replace(/\;$/,'').split(';');
Im Array "ausgabe" hast du dann die drei verschiedenen Resultate, also ausgabe[0] entsricht dem was in Ausgabe 1 steht etc.
 
Zuletzt bearbeitet:
Moin, moin

Herzlichen Dank, daß nenne ich mal ne einfache Lösung.
Eine Nachfrage aber doch: tmp = y.replace(/\d+/g,'')
funktioniert nur für Zahlen; aber diese 8 Stellen können
beliebig sein, sprich Buchstaben oder Zahlen.

Ich bin mit regulären Ausdrücken nicht sehr vertraut, aber
tmp = y.replace(/\w.+$/g,'') oder tmp = y.replace(/\.+$/g,'')
funktioniert schon mal nicht. :confused:

Auf jeden Fall schon mal an dieser Stelle danke für deine
umfangreiche Hilfe.

Ciao
nimenn
 
Hab meinen Beitragnochmal editiert. Die tmp-Variable brauchst du jetzt gar nicht. Sag mal genau, woraus die einzelnen Einträge zusammengesetzt sein können sonst stimmt der RegExp vielleicht nicht!

Ich bin jetzt von beliebig vielen Zeichen, gefolgt von einem Leerzeichen, 8 Zahlen und Buchstaben einem Strichpunkt und ein Leerzeichen ausgegangen. Wenn das so passt kannst du das Script 1:1 verwenden.

Ansonsten mach's selber! Kann dir eine gute Seite über RegExps empfehlen.
 
Zuletzt bearbeitet:
Moin, moin

Ich merke, daß ich nicht präzise genug arbeite. :(
Also grundsätzlich können die Daten so aussehen:

Vorname Nachname Identnummer;

d.h. Buchstaben(inkl -) Buchstaben (inkl -) BuchstabenZahlen;

Aber ich will das erstmal selbst probieren, habe seit gestern Blut geleckt ;)

Ciao und nochmals Danke - auch für den Link
nimenn
 
Zurück