按空格拆分字符串,没有空元素?

Ind*_*ial 24 javascript regex

我试图使用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", ""]
Run Code Online (Sandbox Code Playgroud)

Gum*_*mbo 52

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

str.match(/[^ ]+/g)
Run Code Online (Sandbox Code Playgroud)

  • 如果可能有标签或新行,则可以匹配/\S +/g. (8认同)

Ore*_*aki 20

这有点旧,但出于文档目的,还有另一种巧妙的方法。

someString.filter(Boolean);

// Example
['fds', '', 'aaaaa', 'AA', 'ffDs', "", 'd'].filter(Boolean);
// Output
["fds", "aaaaa", "AA", "ffDs", "d"]
Run Code Online (Sandbox Code Playgroud)

编辑

它是如何工作的 ?

以下是相同的

.filter(Boolean)
.filter((value) => Boolean(value))
Run Code Online (Sandbox Code Playgroud)

Boolean()as 函数表现为从标准输入到输出的任何类型到布尔值的转换器。

参考文献:
全局对象 -> 布尔值
Truthy
Falsy

  • 好的,首先,我们需要明白这两个是相同的 `.filter(Boolean)` 等于 `.filter((value) => Boolean(value))`。现在这已经不成问题了,“Boolean()”作为函数,充当任何类型到布尔值的转换器。除了 https://developer.mozilla.org/en-US/docs/Glossary/Truthy 之外,还请阅读 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean#description和 https://developer.mozilla.org/en-US/docs/Glossary/Falsy (2认同)

use*_*877 14

无论什么分离器,它始终有效:

str.split(' ').filter(function(i){return i})
// With ES6
str.split(' ').filter(i => i)
Run Code Online (Sandbox Code Playgroud)

在某些其他情况下,过滤器逻辑也可以更改.

  • 答案很简单,如果你有多个空格字符,你的结果中会有空字符串(''),并且因为`if('')`为false,所以`filter`函数过滤器会在最终结果中删除它们. (3认同)
  • 你知道,**为什么**这有效吗?文档称“filter()”方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。在这种情况下,空元素似乎被此方法忽略,因此不在结果数组中。我不明白为什么这个测试不对空元素进行。 (2认同)
  • 如果您希望过滤器函数返回布尔值而不是字符串(尽管令人惊讶的是,即使使用 Typescript,这也不是问题),您也可以执行 `str.split(' ').filter(Boolean)` (2认同)