如何使用正则表达式将字符串按空格分割,并忽略前导空格和尾随空格,将其分割为一个单词数组?

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

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

66484 次浏览

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

如果您对不是空格的比特更感兴趣,那么您可以匹配非空格,而不是在空格上分割。

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

请注意,以下返回 null:

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

因此,最好的学习模式是:

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

您可以匹配任何非空格序列,而不必在空格序列上进行拆分:

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

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

    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;
}