web-dev-qa-db-ja.com

正規表現を使用して、空白で文字列を分割し、先頭と末尾の空白を単語の配列に無視するにはどうすればよいですか?

通常、JavaScriptで次のコードを使用して、文字列を空白で分割します。

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

もちろん、これは単語間に複数の空白文字がある場合でも機能します。

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

問題は、先頭または末尾に空白がある文字列がある場合です。その場合、結果の文字列の配列には、配列の先頭および/または末尾に空の文字が含まれます。

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

このような空の文字を削除するのは簡単な作業ですが、可能な限り正規表現内でこれを処理したいです。この目標を達成するために私が使用できる正規表現を誰か知っていますか?

69
natlee75

空白ではないビットに関心がある場合は、空白で分割する代わりに非空白に一致させることができます。

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

以下はnullを返すことに注意してください:

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

したがって、学習するのに最適なパターンは次のとおりです。

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

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

42
Josh

空白シーケンスで分割する代わりに、非空白シーケンスと一致させることができます。

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

他のコードほどエレガントではないが、非常に理解しやすい:

    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