2012-02-04 132 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