我有以下
var example = "caty not caby";
example.split(/a[^b]/);
返回
[ "c", "y not caby" ]
但是我想要
["c","ty not caby"]
我怎么能在每个'a'而不是每个'ab'分割字符串而不会在'a'之后丢失字符(在上面的例子中是't')?
答案 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)/));