Pergunta

Desde que eu comecei a escrever esta pergunta, eu acho que descobri as respostas para cada pergunta que eu tinha, mas eu pensei que eu ia postar qualquer maneira, como ele pode ser útil para outras pessoas e mais esclarecimentos pode ser útil.

Eu estava tentando usar uma expressão regular com lookahead com a divisão função javascript. Por alguma razão não foi dividir a corda, embora ele encontra uma correspondência quando eu chamo jogo. Inicialmente eu pensei que o problema era de usar a visão antecipada em minha expressão regular. Aqui está um exemplo simplificado:

não funciona:

"aaaaBaaaa".split("(?=B).");

Works:

"aaaaBaaaa".match("(?=B).");

Parece que o problema era que no exemplo de divisão, a string passada não estava sendo interpretado como uma expressão regular. Usando barras em vez de aspas parece para corrigir o problema.

"aaaaBaaaa".split(/(?=B)./);

I confirmou a minha teoria com a seguinte exemplo, o bobo olhando:

"aaaaaaaa(?=B).aaaaaaa".split("(?=B).");

Alguém acha que é estranho que a função jogo assume que você tem uma expressão regular, enquanto a função de divisão não faz?

Foi útil?

Solução

String.split aceita uma string ou expressão regular como seu primeiro parâmetro. O String.match método só aceita uma expressão regular.

Eu imagino que String.match irá tentar e trabalhar com o que é passado; Então, se você passar uma cadeia que vai interpretá-lo como uma expressão regular. O String.split método não tem o luxo de fazer isso porque ele pode aceitar expressões e cordas regulares; neste caso, seria tolice de segunda suposição.


Editar : (From: "JavaScript: The Definitive Guide")

String.match requer uma expressão regular para trabalhar. O argumento passado deve ser um RegExp objeto que especifica o padrão a ser correspondido. Se esse argumento não é um RegExp , ele é primeiro convertido para um por passá-lo para o RegExp() construtor.

Outras dicas

Se bem me lembro (e eu poderia ser muito errado aqui), o método split foi implementado em javascript antes de o motor regex foi largamente utilizado, por isso é presumivelmente para compatibilidade com versões anteriores.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top