拆分数组regex (a但不是ab,不丢失a后的字符)

split array regex (a but not ab, without losing char after a)

本文关键字:字符 regex 数组 拆分 ab      更新时间:2023-09-26

我有以下内容

var example = "caty not caby";
example.split(/a[^b]/);

返回

[ "c", "y not caby" ] 

但我正试图得到

["c","ty not caby"]

我怎么能在每个'a'而不是每个'ab'分开字符串而不丢失'a'之后的字符(在上面的例子中是't')?

其他答案都提到了负面展望,但我将尝试解释为什么需要使用

你的正则表达式a[^b]匹配a下一个字符,只要它不是b,所以它总是两个。在您的示例字符串中,这是"caty not caby",因为at匹配这两个。

然而,

超前模式被称为零宽度,因为它们进行检查但不被认为是匹配的一部分,因此a(?!b)将精确匹配一个字符,即使模式同时使用ab

caty not caby
 ^^       ^
 ||       checked and rejected
 ||
 |checked but not considered part of the match
 character matched because the lookahead test passed

所以,这就是为什么这是有效的

var example = "caty not caby";
var split = example.split(/a(?!b)/)
console.log(split);

您可以使用负向前看并排除用于分割的序列。

var example = "caty not caby";
console.log(example.split(/a(?!b)/));

使用一个反向向前看断言:

/a(?!b)/

var example = "caty not caby";
console.log(example.split(/a(?!b)/));