2010-11-26 11 views
1

J'ai du mal à comprendre comment diviser un texte pour chaque 3 occurrences du "|" personnage. Voici mon entrée:Comment diviser une chaîne pour toutes les 3 occurrences d'un personnage?

123 | name1 | description | $ 2.980,00 | 234 | name2 | description | $ 2.980,00 | 345 | name3 | description | $ 2.980,00 

Ce serait ma sortie désirée:

var array[0] = "123 | name1 | description | $ 2.980,00" 
var array[1] = "234 | name2 | description | $ 2.980,00" 
... 
+2

Doit-il utiliser regex? –

+0

Je ne sais pas, s'il y a une autre façon de le faire pas de problème :) – mateusmaso

+2

Mieux serait juste [string.split] (http://www.w3schools.com/jsref/jsref_split.asp) – Vlad

Répondre

2

je le ferais de cette façon (comme Keng mentionné, il est appelé tokenizing):

var myarray=text.split("|"); 
var json = new Array(); 
for (var i=0; i+3<myarray.length; i+=4) { 
json.push({id: myarray[i], name: myarray[i+1], 
     desc: myarray[i+2], price: myarray[i+3]}); 
} 
+1

Ouais, * tokenizing * la source est certainement la meilleure route dans mon exp. – Keng

+0

@thejh: Il me semble que [la fonction 'text.split' de Javascript] (http://homepage.ntlworld.com/kayseycarvey/jss4p1.html) ne prend qu'un argument comme" "|" ', pas une regex argument comme '/ \ s * \ | \ s * /'; Est-ce correct? Je ne dis pas qu'il y a quelque chose qui ne va pas dans votre réponse, juste essayer de comprendre la bibliothèque. Existe-t-il une version de 'split' qui prend un argument regex? – tchrist

+0

@tchrist: les expressions rationnelles fonctionnent également, au moins dans Google Chrome: '" 123a567b89h749 ".split (/ [az]/g)' évalue à '[" 123 "," 567 "," 89 "," 749 "]' – thejh