J'ai une situation où je veux obtenir une expression rationnelle de l'utilisateur et l'exécuter contre quelques milliers de chaînes d'entrée. Dans le manuel, j'ai trouvé que l'objet RegExp
a une méthode .compile()
qui est utilisée pour accélérer les choses dans de tels cas. Mais pourquoi dois-je passer à nouveau la chaîne regexp si je les ai déjà passés dans le constructeur? Peut-être constructeur fait le compile()
lui-même?Javascript: quel est le point de RegExp.compile()?
Répondre
RegExp().compile()
method is deprecated. C'est fondamentalement le même que le constructeur, ce qui je suppose est pourquoi il était obsolète. Vous devriez seulement utiliser le constructeur de nos jours.
En d'autres termes, vous avez utilisé pour être en mesure de le faire:
var regexp = new RegExp("pattern");
regexp.compile("new pattern");
Mais de nos jours, il est pas différent d'appeler simplement:
var regexp = new RegExp("pattern");
regexp = new RegExp("new pattern");
Pour autant que je peux dire à tous RegExp .compile est remplace l'expression régulière sous-jacente d'un objet RegExp. Je pense que la compilation a pu avoir de la valeur dans le passé, mais tous les moteurs JS modernes "compilent" la regex lors du premier appel et mettent en cache cette version "compilée".
Et avec Opera 11, l'exécution de RegExp.compile()
provoquera réellement des erreurs. De toute évidence, quand Opera "compile" une regex, il encapsule la chaîne re.source
dans les barres obliques (par exemple, re.source == "^(.)"
devient "/^(.)/"
). Si vous compilez manuellement l'expression régulière, Opera ne reconnaît pas ce fait et va de l'avant 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.
Vous devez compiler votre regex premier à l'utiliser si vous utilisez /
, essayez ceci:
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"))
Wow, c'est intéressant. Je viens de vérifier, et vous avez raison! Ce n'est pas mentionné dans MDN cependant. –
Voir cette explication: http://stackoverflow.com/a/7964948/651789 – ken
- 1. Quel est le point de -setFormatWidth: ou -formatWidth de NSNumberFormatter?
- 2. Quel est exactement le point de l'attribut EnablePartialRendering de ScriptManager?
- 3. Quel est le point de `void func() throw (type)`?
- 4. Dans Scheme, quel est le point de "set!"?
- 5. Threads POSIX: Variables de condition - quel est le point?
- 6. Quel est le point d'entrée d'un script AS3?
- 7. À quel point le filtrage d'adresse IP est-il sécurisé?
- 8. À quel point le web est-il dangereux?
- 9. A quel point mettre javascript hors de l'en-tête est-il mauvais?
- 10. Quel est exactement le sens de "===" en javascript?
- 11. Quel est le meilleur uploader de fichiers JavaScript/Flash?
- 12. Quel est le remplacement de la variable .value en javascript?
- 13. À quel point Google Moderator est-il extensible?
- 14. À quel point ce patron est-il mauvais?
- 15. À quel point est-il difficile d'utiliser NetBeans RCP?
- 16. Quel est le point derrière les intersections de classes de caractères dans Java Regex?
- 17. Quel est le point pour UpdateModel de prendre des valeurs de RouteData et QueryString?
- 18. Quel est le meilleur point de départ sur Entity Framework de MS?
- 19. Quel est le mot-clé réservé pour NaN en javascript?
- 20. Mesure de mise au point Javascript
- 21. quel est le codage?
- 22. Quel est le point du modificateur "static new" pour une fonction?
- 23. Quel est le point des colonnes Lowered * dans les tables d'adhésion à asp.net?
- 24. Quel est l'équivalent C++ de GetObject dans JavaScript et VBScript?
- 25. Quel est le moyen le plus simple de décrémenter une date en Javascript d'un jour?
- 26. Quel est le moyen le plus court de convertir une valeur JavaScript en chaîne?
- 27. Quel est le void * retourné par CGBitmapContextGetData?
- 28. Le point de Bencoding
- 29. Quel est le moyen le plus efficace d'obtenir le premier élément d'un tableau associatif en JavaScript?
- 30. Quel est le moyen le plus simple d'apprendre le code ActionScript lorsque vous connaissez JavaScript?
Quels moteurs font exactement les expressions régulières de cache? Et le font-ils toujours? Combien de temps une expression est-elle conservée dans le cache? Je suis particulièrement intéressé par le V8. – CoDEmanX