Ответ 1
Вы можете просто сопоставить все последовательности без пробелов:
str.match(/[^ ]+/g)
Я пытаюсь взорвать строку, используя 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)
Независимо от того, какой разделитель всегда работает:
str.split(' ').filter(function(i){return i})
// With ES6
str.split(' ').filter(i => i)
Логика фильтра также может измениться в некоторых других случаях.
Добавить функцию:
//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"]
Если вам нужна функция, которую вы можете использовать, просто расширьте строку:
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 за подсказку