Javascript 按空格拆分字符串,不包含空元素?

Javascript 按空格拆分字符串,不包含空元素?,javascript,regex,Javascript,Regex,我正在尝试使用javascript分解一个字符串,以选择搜索词,空格分隔。但是,如果searchterm以空格结尾,则会得到空数组元素,如下所示 我应该做些什么来避免后处理这个数组和删除空元素 var str = "searchterm1 searchterm2"; console.log(str.split(" ")); // ["searchterm1", "searchterm2"] var strb = "searchterm1 "; // Note the ending whites

我正在尝试使用javascript分解一个字符串,以选择搜索词,空格分隔。但是,如果searchterm以空格结尾,则会得到空数组元素,如下所示

我应该做些什么来避免后处理这个数组和删除空元素

var str = "searchterm1 searchterm2";
console.log(str.split(" ")); // ["searchterm1", "searchterm2"]

var strb = "searchterm1 "; // Note the ending whitespace
console.log(strb.split(" ")); // ["searchterm1", ""]

您可以简单地匹配所有非空格字符序列:

str.match(/[^ ]+/g)
添加功能:

//Some browsers support trim so we check for that first
if(!String.prototype.trim) {  
  String.prototype.trim = function () {  
    return this.replace(/^\s+|\s+$/g,'');  
  };  
}
然后调用字符串上的trim:

var strb = "searchterm1 "; // Note the ending whitespace
console.log(strb.trim().split(" ")); // ["searchterm1"]

无论使用何种拆分器,此选项始终有效:

str.split(' ').filter(function(i){return i})
// With ES6
str.split(' ').filter(i => i)

在某些其他情况下,过滤器逻辑也会发生变化。

如果您想要一个可以使用的函数,只需扩展字符串:

 String.prototype.splitNoSpaces = function(){
     return this.split(' ').filter(function(i){return i});
 };

 //Now use it!
 var classString = "class1    class2 class3    class4";
 var classArray = classString.splitNoSpaces();

 //classArray[0] is class1
 //classArray[1] is class2
 //classArray[2] is class3
 //classArray[3] is class4

感谢@user1079877的提示,这有点旧了,但出于文档目的,还有另一种简洁的方法

someString.filter(Boolean);

// Example
['fds', '', 'aaaaa', 'AA', 'ffDs', "", 'd'].filter(Boolean);
// Output
["fds", "aaaaa", "AA", "ffDs", "d"]

如果可能有制表符或新行,您可以匹配/\S+/g。如果中间有多个空格,比如
“foo\x20\x20bar”
?@Gumbo
str.trim().split(+/g)
,您知道为什么这样做吗?文档说明
filter()
方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。在这种情况下,空元素似乎被此方法忽略,因此不在结果数组中。我不明白为什么这个测试不针对空元素。答案很简单,如果你有多个空格字符,你的结果中会有空字符串(“”),因为
if(“”)
为false,
filter
function filter在最终结果中去除它们。如果希望filter函数返回一个布尔值而不是字符串(尽管这是一个令人惊讶的问题,即使使用Typescript),也可以执行
str.split(“”).filter(布尔)