51 votes

Javascript: quel est l'intérêt de RegExp.compile ()?

J'ai une situation dans laquelle je veux obtenir une expression rationnelle de l'utilisateur et l'exécuter avec quelques milliers de chaînes d'entrée. Dans le manuel , je trouve que le RegExp objet a un .compile() méthode qui est utilisée pour accélérer les choses ins tels cas. Mais pourquoi dois-je lui transmettre à nouveau la chaîne regexp si je les ai déjà passées dans le constructeur? Peut-être que le constructeur fait le compile() lui-même?

87voto

Daniel Lew Points 39063

La méthode RegExp().compile() est obsolète . C'est fondamentalement la même chose que le constructeur, ce qui, je suppose, est la raison pour laquelle il a été déconseillé. Vous devriez seulement avoir à utiliser le constructeur de nos jours.

En d'autres termes, vous pouviez faire ceci:

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

Mais aujourd'hui, ce n'est pas différent d'appeler simplement:

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

6voto

ridgerunner Points 14773

Et avec Opera 11, exécuter regex.compile () provoquera des erreurs.

Evidemment, quand Opera "compile" une expression rationnelle, il encapsule la chaîne regex.source dans des barres obliques (par exemple, re.source == "^ (.)" Devient "/^(.)/"). Si vous compilez la regex manuellement, Opera ne reconnaît pas ce fait et le compile à nouveau (re.source devient "//^(.)//"). Chaque compilation génère un ensemble supplémentaire de barres obliques, qui modifie la signification de l'expression régulière et génère des erreurs.

3voto

olliej Points 16255

Autant que je sache, RegExp.compile remplace l'expression régulière sous-jacente d'un objet RegExp. Je pense que la compilation a peut-être eu une valeur dans le passé, mais tous les moteurs JS modernes "compilent" la regex au premier appel et mettent en cache cette version "compilée".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X