Javascript não irá dividir usando regex
-
03-07-2019 - |
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?
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.