Comment diviser une chaîne avec plusieurs séparateurs en JavaScript ? J'essaie de diviser sur les virgules et les espaces mais, à ma connaissance, la fonction de division de JavaScript ne prend en charge qu'un seul séparateur.
Réponses
Trop de publicités?Passez un regexp comme paramètre :
js> "Hello awesome, world!".split(/[\s,]+/)
Hello,awesome,world!
Modifié pour ajouter :
Vous pouvez obtenir le dernier élément en sélectionnant la longueur du tableau moins 1 :
>>> bits = "Hello awesome, world!".split(/[\s,]+/)
["Hello", "awesome", "world!"]
>>> bit = bits[bits.length - 1]
"world!"
... et si le motif ne correspond pas :
>>> bits = "Hello awesome, world!".split(/foo/)
["Hello awesome, world!"]
>>> bits[bits.length - 1]
"Hello awesome, world!"
Vous pouvez passer une expression rationnelle dans L'opérateur de division de Javascript . Par exemple :
"1,2 3".split(/,| /)
["1", "2", "3"]
Ou, si vous voulez permettre à plusieurs séparateurs ensemble d'agir comme un seul :
"1, 2, , 3".split(/(?:,| )+/)
["1", "2", "3"]
(Vous devez utiliser les parenthèses non capturantes (? :), car sinon, elles seront recollées dans le résultat. Ou vous pouvez être intelligent comme Aaron et utiliser une classe de caractères).
(Exemples testés dans Safari + FF)
Pour ceux d'entre vous qui veulent plus de personnalisation dans leur fonction de fractionnement, j'ai écrit un algorithme récursif qui fractionne une chaîne donnée avec une liste de caractères à fractionner. J'ai écrit ceci avant de voir le message ci-dessus... J'espère que cela aidera un programmeur frustré...
splitString = function(string, splitters) {
var list = [string];
for(var i=0, len=splitters.length; i<len; i++) {
traverseList(list, splitters[i], 0);
}
return flatten(list);
}
traverseList = function(list, splitter, index) {
if(list[index]) {
if((list.constructor !== String) && (list[index].constructor === String))
(list[index] != list[index].split(splitter)) ? list[index] = list[index].split(splitter) : null;
(list[index].constructor === Array) ? traverseList(list[index], splitter, 0) : null;
(list.constructor === Array) ? traverseList(list, splitter, index+1) : null;
}
}
flatten = function(arr) {
return arr.reduce(function(acc, val) {
return acc.concat(val.constructor === Array ? flatten(val) : val);
},[]);
}
var stringToSplit = "people and_other/things";
var splitList = [" ", "_", "/"];
splitString(stringToSplit, splitList);
L'exemple ci-dessus renvoie : ["people", "and", "other", "things"]
Vous pouvez simplement regrouper tous les caractères que vous souhaitez utiliser comme séparateurs, individuellement ou collectivement, dans une expression régulière et les transmettre à la fonction split. Par exemple, vous pourriez écrire :
console.log( "dasdnk asd, (naks) :d skldma".split(/[ \(,\)]+/) );
Et le résultat sera :
["dasdnk", "asd", "naks", ":d", "skldma"]
- Réponses précédentes
- Plus de réponses