web-dev-qa-db-fra.com

JavaScript split String avec espace blanc

Je voudrais diviser une chaîne mais je voudrais garder un espace blanc comme:

var str = "my car is red";

var stringArray [];

stringArray [0] = "my";
stringArray [1] = " ";
stringArray [2] = "car";
stringArray [3] = " ";
stringArray [4] = "is";
stringArray [5] = " ";
stringArray [6] = "red";

Comment puis-je procéder pour le faire?

Merci !

40
Jose

Vous pouvez diviser la chaîne sur les espaces blancs, puis l'ajouter de nouveau, car vous savez qu'il se trouve entre chacune des entrées.

var string = "text to split";
    string = string.split(" ");
var stringArray = new Array();
for(var i =0; i < string.length; i++){
    stringArray.Push(string[i]);
    if(i != string.length-1){
        stringArray.Push(" ");
    }
}

Mise à jour: Espace de fin supprimé.

42
somethinghere

Utiliser regex:

var str   = "my car is red";
var stringArray = str.split(/(\s+)/);

console.log(stringArray); // ["my", " ", "car", " ", "is", " ", "red"] 

\s correspond à n’importe quel caractère qui est un espace, ajouter le plus le rend glouton, faire correspondre un groupe commençant par des caractères et se terminant par des espaces, et le groupe suivant commence quand il y a un caractère après l’espace, etc.

61
chridam

Pour scinder une chaîne par un espace comme dans Python lang, peut être utilisé:

   var w = "hello    my brothers    ;";
   w.split(/(\s+)/).filter( function(e) { return e.trim().length > 0; } );

sortie:

   ["hello", "my", "brothers", ";"]

ou similaire:

   w.split(/(\s+)/).filter( e => e.trim().length > 0)

(en sortie)

20
Dmitriy Yusupov

Vous pouvez simplement diviser la limite de Word en utilisant \b. Voir MDN

"\ b: correspond à une limite de mot de largeur zéro, par exemple entre une lettre et un espace."

Vous devez également vous assurer qu'il est suivi de l'espace blanc \s. de sorte que les chaînes comme "My car isn't red" fonctionne toujours:

var stringArray = str.split(/\b(\s)/);

La première \b doit prendre en compte plusieurs espaces, par exemple: my car is red

EDIT: Ajout du groupement

7
Rhumborl
str.split(' ').join('§ §').split('§');
3
Esger

Bien que cela ne soit pas pris en charge par tous les navigateurs, si vous utilisez la capture de parenthèses à l'intérieur de votre expression régulière, l'entrée capturée est fusionnée dans le résultat.

Si separator est une expression régulière contenant des parenthèses de capture, chaque fois que ce séparateur est mis en correspondance, les résultats (y compris les résultats non définis) des parenthèses de capture sont fusionnés dans le tableau de sortie. [ référence )

Alors:

var stringArray = str.split(/(\s+)/);
                             ^   ^
//

Sortie:

["my", " ", "car", " ", "is", " ", "red"]

Cela réduit les espaces consécutifs dans l'entrée d'origine, mais sinon, je ne peux penser à aucun piège.