如何使用空格分割字符串,并使用正则表达式将前导和尾随空格忽略为单词数组?

nat*_*e75 70 javascript regex string whitespace removing-whitespace

我通常在JavaScript中使用以下代码来按空格分割字符串.

"The quick brown fox jumps over the lazy dog.".split(/\s+/);
// ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."]
Run Code Online (Sandbox Code Playgroud)

这当然可以在单词之间存在多个空白字符时起作用.

"The  quick brown fox     jumps over the lazy   dog.".split(/\s+/);
// ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."]
Run Code Online (Sandbox Code Playgroud)

问题是当我有一个具有前导或尾随空格的字符串时,在这种情况下,生成的字符串数组将在数组的开头和/或结尾包含一个空字符.

"  The quick brown fox jumps over the lazy dog. ".split(/\s+/);
// ["", "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog.", ""]
Run Code Online (Sandbox Code Playgroud)

消除这些空字符是一项微不足道的任务,但如果可能的话,我宁愿在正则表达式中处理这个问题.有谁知道我可以用什么正则表达式来实现这个目标?

ken*_*bec 113

如果您对不是空格的位更感兴趣,则可以匹配非空格而不是在空格上拆分.

"  The quick brown fox jumps over the lazy dog. ".match(/\S+/g);
Run Code Online (Sandbox Code Playgroud)

请注意,以下内容返回null:

"   ".match(/\S+/g)
Run Code Online (Sandbox Code Playgroud)

所以最好的学习方式是:

str.match(/\S+/g) || []
Run Code Online (Sandbox Code Playgroud)

  • 注意,'''.匹配(/\S +/g)`返回`null`而不是`[]`! (9认同)

Jos*_*osh 42

" The quick brown fox jumps over the lazy dog. ".trim().split(/\s+/);

  • 注意,'''.trim().split(/\s + /)`返回`[""]`! (7认同)
  • 谢谢你的建议.我实际上要走这条路,直到我记得它需要一个支持JavaScript 1.8的浏览器.这对我们的大多数用户来说都很好,但我们仍然支持较旧的浏览器,例如Internet Explorer 7和8,其JavaScript引擎不包含此功能. (3认同)

Gum*_*mbo 15

您可以匹配任何非空白序列,而不是在空格序列中进行拆分:

"  The quick brown fox jumps over the lazy dog. ".match(/\S+/g)
Run Code Online (Sandbox Code Playgroud)