2016-10-28 5 views
2

私は分割配列の正規表現(Aしかし、ABは、Aの後に文字を失うことがないわけではない)

[ "c", "y not caby" ] 

を返しますが、私は

を取得しようとしている以下の

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

を持っています

["c","ty not caby"] 

'a'(上記の例では 't')の後にcharを失うことなく、すべての 'a'ではなくすべての 'ab'で文字列を分割できますか?

+0

'

var example = "caty not caby"; var split = example.split(/a(?!b)/) console.log(split);
//'(否定先読み) – melpomene

+0

や 's.match(B?!)(/(?:AB | [^ A])+/g)を' –

答えて

2

他の回答は否定先読みを言及しているが、私は説明しようなぜあなたはそれを使用する必要があります。

限り、それはBではありませんので、常に2つになるだろうとして、次の文字に一致しa[^b]あなたの正規表現。あなたの例の文字列では、at yはcabyではありません。は両方とも一致しています。

先読みパターン、彼らは試合の一部をチェックを行うが、考えられていないので、しかしゼロ幅と呼ばれているので、a(?!b)は、パターンがBの両方を使用していても、正確に1つの文字に一致します。

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

これがこの理由です。

1

否定的な先読みを使用して、シーケンスを分割して除外することができます。

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

関連する問題