JavaScript 正则表达式分割拒绝空值

6

能否使JavaScript正则表达式拒绝空匹配?

能否告诉String.split()方法拒绝空值?

console.log("abcccab".split("c"));
//result: ["ab", "", "", "ab"]
//desired result: ["ab", "ab"]

我在测试时偶然发现了一个部分答案:
console.log("abccacaab".split(/c+/));
//returns: ["ab", "a", "aab"] 

但是,当匹配在开头时就会出现问题:
console.log("abccacaab".split(/a+/));
//returns: ["", "bcc", "c", "b"]
//          ^^

有没有一个简单明了的答案?还是我们只能去应对它呢?

除了 c 以外,匹配所有字符序列怎么样? - Gumbo
@nathanhayfield 这就是我想要避免的。 - Isaac
2个回答

29

这不是一个精确的正则表达式解决方案,但使用过滤器可以快速完成。

"abcccab".split("c").filter(Boolean);

这将过滤掉虚假的 "" 值。

我感觉我一直在偷你的声望值!https://dev59.com/yGIj5IYBdhLWcg3wx34x#19888749 - Isaac
@Isaac:哈哈,我无论如何都会把我的答案变成 CW。很高兴看到你使用了这些信息! - user1106925

1

在分割之前,从字符串两端裁剪匹配项:

console.log("abccacaab".replace(/^a+|a+$/g, '').split(/a+/));

// ["bcc", "c", "b"]

不错,但不如Squint的回答干净。 - Isaac
@不,我把它留在这里是因为你告诉nathanhayfield你想避免遍历数组并删除空字符串,而这正是filter所做的。 - Paul

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