如何使用JS仅按字符串中间的空格拆分字符串

4

普通的分割方法是这样的:

var a = " a @b c "
console.log(a.split(" "))
["", "a", "b", "c", ""]

但我的期望输出是:[" a", "@b", "c "],这可能吗?怎么做?

1
@mplungjan,然而他不想忽略前导/尾随空格,他希望在输出中保留它。 - CertainPerformance
@mplungjan,这不是你提到的重复内容。应该重新开放。 - Vikasdeep Singh
抱歉...无论如何,这是参考链接:https://dev59.com/EWUp5IYBdhLWcg3w-LQJ - mplungjan
3个回答

7

一种方法是使用正则表达式,并要求在空格之前和之后有单词边界:

var a = " a b c "
console.log(a.split(/\b \b/));

如果允许使用非单词字符,你可以使用match代替-匹配字符串开头的空格,后跟非空格字符,或匹配非空格字符后面的空格和字符串结束,或不受限制地匹配非空格字符:

const a = " foo @bar c "
console.log(
  a.match(/^ *\S+|\S+ *$|\S+/g)
);

回顾先前提到的技巧,还有一个选项是“回顾先行断言”,但由于目前它的支持程度不够可靠,所以在生产代码中并不被广泛采用。

字符串变量a =“ foo @bar c”,它没有正确工作。 - hiacliok

1

这样怎么样呢

a.split(/(?!^) (?!$)/)

如果可能有多个空格并且支持回顾后发现,那么

a.split(/(?<!^ *) +(?! *$)/)


-3
您可以在分割之前修剪字符串,例如:

var a = " a b c ";
a = a.trim();
console.log(a.split(" "));

更新

我读取期望的输出时犯了错误,我的建议代码的结果是:

["a", "b", "c"] 而不是 [" a", "b", "c "]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接