76 votes

JS string.split() sans supprimer les délimiteurs

Comment puis-je diviser une chaîne sans supprimer les délimiteurs ?

Disons que j'ai une chaîne : var string = "abcdeabcde";

Quand je fais var newstring = string.split("d") , j'obtiens quelque chose comme ceci :

["abc","eabc","e"]

Mais je veux obtenir ceci :

["abc","d","eabc","d","e"]

Quand j'ai essayé de faire ma fonction "split2", je me suis tout empêtré dans splice() et les index et "ceci" contre "cela" et ... aargh! Aider! :RÉ

85voto

Kai Points 2869

Essayer:

 "abcdeabcde".split(/(d)/);

41voto

micha Points 439

J'aime la réponse de Kai , mais elle est incomplète. Utilisez plutôt :

 "abcdeabcde".split(/(?=d)/g) //-> ["abc", "deabc", "de"]

Cela utilise une assertion Lookahead Zero-Length dans regex, ce qui fait qu'une correspondance ne fait pas partie du groupe de capture. Aucune autre astuce ou solution de contournement n'est nécessaire.

37voto

InfoLearner Points 3225

Essaye ça:

  1. Remplacez toutes les instances "d" par ",d"
  2. Divisé par ","
 var string = "abcdeabcde";
var newstringreplaced = string.replace(/d/gi, ",d");
var newstring = newstringreplaced.split(",");
return newstring;

J'espère que cela t'aides.

21voto

bobince Points 270740
var parts= string.split('d');
for (var i= parts.length; i-->1;)
    parts.splice(i, 0, 'd');

(La boucle inversée est nécessaire pour éviter d'ajouter d s aux parties de la liste qui ont déjà eu d s insérés.)

6voto

JonMayer Points 712

Peut être fait en une seule ligne :

 var string = "abcdeabcde";    
string.split(/(d)/);
["abc", "d", "eabc", "d", "e"]

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