var example = "caty not caby";
example.split(/a[^b]/);
返回
[ "c", "y not caby" ]
,但我試圖讓
["c","ty not caby"]
如何在每個'a'但不是每個'ab'都分割字符串而不丟失'a'(在上面的例子中是't')之後的字符?
var example = "caty not caby";
example.split(/a[^b]/);
返回
[ "c", "y not caby" ]
,但我試圖讓
["c","ty not caby"]
如何在每個'a'但不是每個'ab'都分割字符串而不丟失'a'(在上面的例子中是't')之後的字符?
其他的答案提到負先行,但我會試着解釋爲什麼你需要使用它。
你的正則表達式匹配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);
您可以使用負向前視並排除分割順序。
var example = "caty not caby";
console.log(example.split(/a(?!b)/));
使用negated lookahead assertion:
/a(?!b)/
var example = "caty not caby";
console.log(example.split(/a(?!b)/));
'/一個/'(負先行) – melpomene
或's.match(B?!)(/(?: AB | [^ A])+ /克)' –