使用积极的前瞻:
"asdf a b c2 ".split(/(?= )/)
// => ["asdf", " a", " ", " b", " c2", " "]
后期编辑编辑: 正如我在 cmets 中所说,缺乏后视功能使这有点棘手。如果所有单词仅由字母组成,您可以使用\b 单词边界匹配器来假装lookbehind:
"asdf a b c2 ".split(/(?= )|\b/)
// => ["asdf", " ", "a", " ", " ", "b", " ", "c2", " "]
但是一旦你输入一些标点符号,它就会崩溃,因为它不仅会在空格上中断:
"asdf-eif.b".split(/(?= )|\b/)
// => ["asdf", "-", "eif", ".", "b"]
如果您确实有不想中断的非字母,那么我也会建议一种后处理方法。
Post-think EDIT:这是基于 JamesA 的原始想法,但改进为不使用 jQuery,并正确拆分:
function chop(str) {
var result = [];
var pastFirst = false;
str.split(' ').forEach(function(x) {
if (pastFirst) result.push(' ');
if (x.length) result.push(x);
pastFirst = true;
});
return result;
}
chop("asdf a b c2 ")
// => ["asdf", " ", "a", " ", " ", "b", " ", "c2", " "]