2012-02-04 121 views
18

我想爆炸一个字符串使用javascript来挑选searchterms,空格分隔。但是,如果searchterm以空白结尾,我会得到空数组元素,如下所示。通过空白分割字符串,没有空元素?

我应该怎么做,而不是后处理这个数组和删除空元素?

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

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

回答

40

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

str.match(/[^ ]+/g) 
+8

如果可能有标签或新行,可以匹配/ \ S +/g。 – kennebec 2012-02-04 16:00:26

+0

为什么你只有少量投票?! 你的回答是非常有用的:) – Amir 2016-02-08 12:46:59

1

附加功能:

//Some browsers support trim so we check for that first 
if(!String.prototype.trim) { 
    String.prototype.trim = function() { 
    return this.replace(/^\s+|\s+$/g,''); 
    }; 
} 

然后调用修剪的字符串:

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

像''foo \ x20 \ x20bar“'之间的多个空格怎么样? – Gumbo 2012-02-04 16:09:51

+1

.replace(/ {2,}/g,''); – 2012-02-04 16:14:39

7

无关于这个总是起作用的分路器:

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

过滤器逻辑在其他一些情况下也可以改变。

+0

你知道,**为什么**这个工程?文档说'filter()'方法创建一个新数组,其中包含所有通过所提供函数实现的测试的元素。 在这种情况下,空白元素似乎被此方法忽略,因此不在结果数组中。 我不明白为什么这个测试没有做空元素。 – 2016-10-12 06:05:55

+3

答案很简单,如果你有多个空格字符,你的结果中会有空字符串(''),并且因为if('')'为false,所以'filter'函数会在final结果。 – user1079877 2016-10-13 08:24:15