2010-02-12 6 views
6

Existe-t-il un moyen plus court d'écrire ceci?JavaScript Regex Compile()

var needed = /\$\[\w+\]/mi; 
needed.compile(/\$\[\w+\]/mi); 

Pourquoi dois-je passer le motif de nouveau dans le regex quand je l'ai déjà déclaré dans la première ligne ?!

+0

Qu'est-ce qui vous fait penser que vous faites? –

+1

Si je ne reprends pas le motif, l'expression régulière prend environ deux fois plus de temps. – JamesBrownIsDead

Répondre

7

Il existe deux façons de définir des expressions régulières en JavaScript, l'une via un constructeur d'objet et l'autre via un littéral. L'objet peut être modifié au moment de l'exécution, mais le littéral est compilé au chargement du script et fournit de meilleures performances.

var txt=new RegExp(pattern,modifiers); 

ou plus simplement:

var txt=/pattern/modifiers; 

C'est la même chose que cobbai dit. En bref, vous n'avez pas à faire les deux.

2

de MDC:

La notation littérale fournit la compilation de l'expression régulière lorsque l'expression est évaluée

si /\$\[\w+\]/mi est un déjà compilé regex.