web-dev-qa-db-fra.com

Comment diviser une chaîne par des espaces en ignorant les espaces de début et de fin dans un tableau de mots utilisant une expression régulière?

J'utilise généralement le code suivant en JavaScript pour scinder une chaîne par des espaces.

"The quick brown fox jumps over the lazy dog.".split(/\s+/);
// ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."]

Cela fonctionne bien sûr même s'il y a plusieurs espaces entre les mots.

"The  quick brown fox     jumps over the lazy   dog.".split(/\s+/);
// ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."]

Le problème vient du fait que j'ai une chaîne qui contient des espaces de début ou de fin, auquel cas le tableau de chaînes résultant inclut un caractère vide au début et/ou à la fin du tableau.

"  The quick brown fox jumps over the lazy dog. ".split(/\s+/);
// ["", "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog.", ""]

C'est une tâche triviale d'éliminer ces caractères vides, mais je préférerais m'occuper de cela dans l'expression régulière si cela était possible. Est-ce que quelqu'un sait quelle expression régulière je pourrais utiliser pour atteindre cet objectif?

63
natlee75

Si vous êtes plus intéressé par les bits qui ne sont pas des espaces, vous pouvez faire correspondre les espaces non-blancs au lieu de les diviser en espaces.

"  The quick brown fox jumps over the lazy dog. ".match(/\S+/g);

Notez que ce qui suit retourne null:

"   ".match(/\S+/g)

Donc, le meilleur modèle à apprendre est:

str.match(/\S+/g) || []
99
kennebec

" The quick brown fox jumps over the lazy dog. ".trim().split(/\s+/);

42
Josh

Au lieu de diviser en séquences d'espaces, vous pouvez faire correspondre toutes les séquences non d'espaces:

"  The quick brown fox jumps over the lazy dog. ".match(/\S+/g)
12
Gumbo

Pas élégant comme les autres mais très facile à comprendre:

    countWords(valOf)
    {
        newArr[];
        let str = valOf;
        let arr = str.split(" ");

        for (let index = 0; index < arr.length; index++) 
       {
           const element = arr[index];
           if(element)
           {
              this.newArr.Push(element);
           }
       }
       this.NumberOfWords = this.newArr.length;

       return this.NumberOfWords;
   }
0
aris