Por que string.split com uma expressão regular que contém um grupo de captura retorna uma matriz que termina com uma string vazia?

Eu gostaria de dividir uma string de entrada no primeiro dois pontos que ainda possui caracteres na mesma linha.

Para isso, estou usando a expressão regular/:(.+)/

Então, dada a string

aaa:
bbb:ccc

Eu esperaria uma saída de

["aaa:\nbbb", "ccc"]

E dada a corda

aaa:bbb:ccc

Eu esperaria uma saída de

["aaa", "bbb:ccc"]

No entanto, quando eu realmente executo esses comandos, recebo

["aaa:\nbbb", "ccc", ""]
["aaa", "bbb:ccc", ""]

Como saída.

Então, de alguma forma, o javascript está adicionando uma string vazia ao final da matriz.

Eu verifiquei odocumentação paraString.split e enquanto ele menciona que, se você executarstring.split em uma sequência vazia com um separador especificado, você obterá uma matriz com uma sequência vazia (e não a matriz vazia). Ele não menciona que sempre existe uma string vazia na saída ou um aviso de que você pode obter esse resultado se cometer um erro comum ou algo assim.

Eu entenderia se minha string de entrada tivesse dois pontos no final ou algo assim; depois é dividido em dois pontos e o restante da correspondência é uma sequência vazia. Esse é o problema mencionado emDividindo string com expressão regular para torná-lo array sem elemento vazio - mas não tenho esse problema, pois minha string de entrada não termina com meu separador.

Sei que uma solução rápida no meu caso será simplesmente limitar a quantidade de correspondências, via"aaa:bbb:ccc".split(/:(.+)/, 2), mas ainda estou curioso:

Por que issostring.split call retorna uma matriz que termina com uma string vazia?

questionAnswers(4)

yourAnswerToTheQuestion