常规拆分的工作方式如下:
[" a", "@b", "c "]
但是我的预期输出是:123456789123456789-1
有可能吗?又如何?
答案 0 :(得分:6)
一种选择是使用正则表达式,并在空格前后要求单词边界:
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)
);
Lookbehind是另一种选择,但尚不足以使其在生产代码中可靠。
答案 1 :(得分:1)
怎么样
a.split(/(?!^) (?!$)/)
如果可能有多个空间并且支持向后搜索,那么
a.split(/(?<!^ *) +(?! *$)/)
答案 2 :(得分:-4)
您可以在分割前修剪字符串,例如:
var a = " a b c ";
a = a.trim();
console.log(a.split(" "));
更新
我错读了预期的输出,我的建议代码的结果是:
[“ a”,“ b”,“ c”]而不是[“ a”,“ b”,“ c”]