2016-10-28 26 views
2

我有以下分裂陣列正則表達式(一但不是AB,不失焦一後)

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

返回

[ "c", "y not caby" ] 

,但我試圖讓

["c","ty not caby"] 

如何在每個'a'但不是每個'ab'都分割字符串而不丟失'a'(在上面的例子中是't')之後的字符?

+0

'/一個/'(負先行) – melpomene

+0

或's.match(B?!)(/(?: AB | [^ A])+ /克)' –

回答

2

其他的答案提到負先行,但我會試着解釋爲什麼你需要使用它。

你的正則表達式匹配a[^b]一個下一個字符,只要它不是b,所以它總是會是兩個。在您的示例字符串中,即「c at y not caby」,因爲與這兩個匹配。

先行的模式,但是被稱爲零寬度因爲他們做了檢查,但不被認爲是比賽的一部分,所以a(?!b)將匹配一個字符,儘管模式同時使用一個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

您可以使用負向前視並排除分割順序。

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