split array regex(一个但不是ab,后面没有丢失char)

时间:2016-10-28 09:17:04

标签: javascript regex

我有以下

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

返回

[ "c", "y not caby" ] 

但是我想要

["c","ty not caby"]

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

3 个答案:

答案 0 :(得分:2)

其他答案提到了负面的预测,但我会尝试解释为什么你需要使用它。

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

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

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);




答案 1 :(得分:1)

您可以使用否定前瞻并排除拆分序列。



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




答案 2 :(得分:0)

使用negated lookahead assertion

/a(?!b)/

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