Javascript: qual é o ponto de RegExp.compile ()?

votos
48

Eu tenho uma situação onde eu quero ter uma expressão regular do usuário e executá-lo contra alguns milhares de cadeias de entrada. No manual descobri que o RegExpobjeto tem um .compile()método que é usado para acelerar as coisas ins tais casos. Mas por que eu tenho que passar a seqüência de expressão regular a ele novamente se eu já passou por eles no construtor? Talvez construtor faz a compile()si mesmo?

Publicado 19/05/2009 em 21:07
fonte usuário
Em outras línguas...                            


4 respostas

votos
83

O RegExp().compile()método é preterido . É basicamente o mesmo que o construtor, que eu suponho que é por isso que foi substituído. Você só deve ter que usar o construtor hoje em dia.

Em outras palavras, você costumava ser capaz de fazer isso:

var regexp = new RegExp("pattern");
regexp.compile("new pattern");

Mas hoje em dia não é diferente de simplesmente chamando:

var regexp = new RegExp("pattern");
regexp = new RegExp("new pattern");
Respondeu 19/05/2009 em 21:12
fonte usuário

votos
6

E com o Opera 11, running RegExp.compile()vai realmente causar erros.

Evidentemente, quando Opera "compila" um regex, que envolve a re.sourcecorda em barras (por exemplo, re.source == "^(.)"torna-se "/^(.)/"). Se você compilar manualmente o regex, Opera não reconhece este fato e vai em frente e compila-lo novamente ( re.sourcetorna-se "//^(.)//"). Cada compilar os resultados em um conjunto extra de barras, que muda o significado da expressão regular e resulta em erros.

Respondeu 08/03/2011 em 19:32
fonte usuário

votos
3

Tanto quanto eu posso dizer tudo RegExp.compile faz é substituir a expressão regular subjacente de um objeto RegExp. Acho compilar pode ter tido valor no passado, mas todos os motores de JS modernos "compilar" o regex em primeira convocação e cache que "compilado" versão.

Respondeu 19/05/2009 em 21:13
fonte usuário

votos
2

Você precisa compilar o regex primeiro a usá-lo se você estiver usando /, tentar fazer isso:

var regex=new RegExp('/[a-zA-Z]/')

console.log("not compiled with escape /", regex.test("ciao") )

regex.compile()

console.log("compiled", regex.test("ciao") )

var regex=new RegExp('[a-zA-Z]')

console.log("not compiled, but no escape /", regex.test("ciao") )

Respondeu 03/11/2016 em 14:21
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more