2011-04-27 4 views
1

J'ai la varaible chaîne javascript suivante:découpant une chaîne avec des sous-groupes

var a = "1870|A00,1871|A01"; 

Je veux séparer la chaîne ci-dessus dans les chaînes ci-dessous:

var a1 = 1870,1871 
var a2 = A00,A01 

Tous les conseils sur ce sujet?

+0

Ceci est simplement un cas de [fractionnement d'une chaîne] (http://stackoverflow.com/questions/96428/how-do-i-split-this-string-with-javascript) deux fois, puis [joindre une partie de les tableaux] (http://stackoverflow.com/questions/1353579/javascript-array-element-to-string). Je ne sais pas si cela compte comme un doublon, mais c'est terriblement proche. – jball

Répondre

1
var a = "1870|A00,1871|A01"; 

var b = a.split(',');  // split on the commas 
var a1 = [], a2 = [];  // temporary arrays 

// foreach of the substrings 
for (var i = 0; i < b.length; ++i) { 
    var c = b[i].split('|'); // split on the pipe char 
    a1.push(c[0]);   // and store the 
    a2.push(c[1]);   // two elements 
} 

a1 = a1.join(',');  // and reconstruct the 
a2 = a2.join(',');  // two strings 
2

Pour diviser une chaîne, le code split method peut être utilisé. Split accepte comme paramètre le délimiteur que vous voulez diviser, dans votre cas, la virgule et le tuyau. Il renvoie un tableau d'objets trouvés avant et après le délimiteur (qui finit par être un tableau de taille supérieure au nombre de fois que le délimiteur apparaît).

Pour ajouter un objet à un tableau à la volée afin de créer vos a1 et a2, utilisez push. Push ajoute un objet à la fin d'un tableau.

Pour obtenir une chaîne de vos deux tableaux avec des virgules séparant chacun, utilisez join. Join prend un tableau et renvoie une chaîne avec quel que soit votre argument séparant chaque entrée.

var a1 = []; 
var a2 = []; 
var firstGrouping = a.split(","); 
var firstGroupingLength = firstGrouping.length; 
for(var i = 0; i < firstGroupingLength; i++) { 
    var secondGrouping = firstGrouping[i].split("|"); 
    a1.push(secondGrouping[0]); 
    a2.push(secondGrouping[1]); 
} 
var a1String = a1.join(','); 
var a2String = a2.join(','); 

de généraliser le code ci-dessus pour permettre à des articles plus groupés autour du tube (par exemple une chaîne d'entrée var a = "1870|Z26|A00,1871|Z25|A01"), au lieu de considérer a1 et a2 un tableau de tableaux qui est construit dynamiquement.

+0

N'oubliez pas de 'joindre '' a1' et 'a2'. –

+0

@Alin - l'a ajouté. – justkt

0

Essayez Google la prochaine fois, utilisez la méthode .split() - http://www.w3schools.com/jsref/jsref_split.asp. Pour diviser votre chaîne en un tableau comme ça.

var a="1870|A00,1871|A01"; 
    var parts = a.split(","); 
+1

Documentation appropriée: https://developer.mozilla.org/fr/JavaScript/Reference/Global_Objects/String/split –

0
var a = "1870|A00,1871|A01" 

var splita = a.split(","); 

splita[0] = splita[0].split("|"); 
splita[1] = splita[1].split("|"); 

var a1 = [splita[0][0], splita[1][0]]; 
var a2 = [splita[0][1], splita[1][1]]; 
4
var a = "1870|A00,1871|A01"; 
var a1 = a.match(/\d+(?=\|)/g); 
var a2 = a.match(/\w\d+(?=,|$)/g); 

// a1 
// 1870,1871 
// a2 
// A00,A01 
+0

Mark: Merci, je veux exactement comme ça. – user569125

0

Cela peut être fait en utilisant assez facilement remplacer une expression régulière.

var a1 = a.replace(/\|A[0-9]+/,""); 
var a2 = a.replace(/[0-9]+\|/,""); 

Je n'ai pas essayé le code mais cela devrait fonctionner.

Questions connexes