99 votes

Diviser une chaîne une fois en javascript ?

Comment puis-je diviser une chaîne de caractères une seule fois, c'est-à-dire faire en sorte que 1|Ceci n'est pas une pipe: | Oui parser vers : ["1", "Ceci n'est pas une pipe: | Oui"] ?

La limite du fractionnement ne semble pas aider...

141voto

yarmiganosca Points 1094

Vous devriez utiliser String.indexOf('|') pour obtenir l'indice de la première occurrence de '|'.

var i = s.indexOf('|');
var splits = [s.slice(0,i), s.slice(i+1)];

20 votes

Pas aussi "amusant" que celui de Nick, mais probablement plus efficace. Notez également le +1 devrait en fait être la longueur de la chaîne de séparation, si elle comporte plus d'un caractère.

2 votes

Pourquoi cette solution est-elle moins "amusante" ?

0 votes

Pour ceux qui se posent la question, pour faire cela avec 2 ou plusieurs morceaux, vous pourriez utiliser indexOf dans une boucle ou : var i = s.split('|',2).join('|').length;//2nd index var splits = [s.slice(0,i).split('|'), s.slice(i+1)];

88voto

Nick Craver Points 313913

Cette approche n'est pas très jolie, mais elle fonctionne avec une efficacité décente :

var string = "1|Ceci n'est pas une pipe: | Oui";
var components = string.split('|');
alert([components.shift(), components.join('|')]);

Voici une démonstration rapide de ce système

0 votes

C'est en fait mieux que le regex, je pense. Sélectionné comme correct, merci !

2 votes

Pour clarifier, il divise en N parties, puis place la première sur une liste et joint le reste sur la même liste.

0 votes

Si vous voulez obtenir k tokens de la chaîne au lieu de 1, faites la même chose que ci-dessus sauf que vous utilisez components.splice(0,k) au lieu de components.shift().

14voto

Matthew Flaschen Points 131723

Vous pouvez utiliser :

var splits = str.match(/([^|]*)\|(.*)/);
splits.shift();

La regex divise la chaîne en deux groupes de correspondance (entre parenthèses), le texte précédant le premier | et le texte suivant. Ensuite, nous shift le résultat pour se débarrasser de la correspondance de la chaîne entière ( splits[0] ).

2 votes

Correctement, cela devrait probablement être ancré au début. cependant, les regexen javascript semblent être gourmands.

6voto

Hassek Points 3136

Une seule ligne et imo, plus simple :

var str = 'I | am super | cool | yea!';
str.split('|').slice(1).join('|');

Ce retour "Je suis super cool !".

8 votes

Ce n'est pas ce qui a été demandé, ils cherchent aussi la première partie manquante.

3voto

Josh the Goods Points 97

Essayez ça :

function splitOnce(input, splitBy) {
    var fullSplit = input.split(splitBy);
    var retVal = [];
    retVal.push( fullSplit.shift() );
    retVal.push( fullSplit.join( splitBy ) );
    return retVal;
}

var whatever = splitOnce("1|Ceci n'est pas une pipe: | Oui", '|');

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