773 votes

Comment diviser une chaîne avec plusieurs séparateurs en javascript ?

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.

999voto

Aaron Maenpaa Points 39173

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!"

358voto

Jesse Rusak Points 33702

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)

15voto

2astalavista Points 7092

Méthode délicate :

var s = "dasdnk asd, (naks) :d skldma";
var a = s.replace('(',' ').replace(')',' ').replace(',',' ').split(' ');
console.log(a);//["dasdnk", "asd", "naks", ":d", "skldma"]

9voto

Stephen Sweriduk Points 118

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"]

8voto

user3558931 Points 4619

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"]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X