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?
Réponses
Trop de publicités? 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");
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.