77

我通常在 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.", ""]

消除这些空字符是一项微不足道的任务,但如果可能的话,我宁愿在正则表达式中处理这个问题。有谁知道我可以使用什么正则表达式来实现这个目标?

4

4 回答 4

122

如果您对不是空格的位更感兴趣,您可以匹配非空格而不是在空格上拆分。

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

请注意,以下返回null

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

所以最好的学习模式是:

str.match(/\S+/g) || []
于 2013-02-16T16:37:31.410 回答
51

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

于 2013-02-16T16:36:26.377 回答
16

您可以匹配任何非空白序列,而不是在空白序列处拆分:

"  The quick brown fox jumps over the lazy dog. ".match(/\S+/g)
于 2013-02-16T16:37:33.283 回答
0

不像其他代码那样优雅,但很容易理解:

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

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

       return NumberOfWords;
   }
于 2018-10-26T23:22:20.093 回答