2009-08-27 7 views
0

Pouvez-vous m'aider à comprendre cela? J'ai l'extrait de code JavaScript suivant:Une question JavaScript RegExp

pattern = new RegExp('^bla*a', 'i'); 
console.debug(pattern.exec('blatr')); 

Après avoir exécuté ceci, la sortie est ["bla"]. La façon dont j'interprète cette expression régulière est la suivante: trouvez-moi une chaîne qui commence par 'bla' et se termine par 'a', avec autant de caractères intermédiaires. Dans ce cas, 'blatr' ne devrait pas correspondre à l'expression régulière, mais c'est le cas. Qu'est-ce que je fais de mal?

Merci.

+0

Toute raison pour laquelle ma réponse n'a pas été choisi (je veux savoir purement pour l'analyse académique personnelle, bien sûr) – aditya

Répondre

0

Le a * dans votre expression est correspondant le caractère précédent un zéro ou plusieurs fois, pas la chaîne bla. Vous devrez utiliser des parenthèses. Essayez ceci:

new RegExp('(^bla){1}.+a$', 'i'); 

EDIT: Aucun point en utilisant + dans une expression qui correspond au début d'une chaîne. En outre, puisque vous dites que vous voulez correspondre à tous les caractères entre bla et un vous aurez besoin d'utiliser un + après le.

EDIT: Ahem, il semble que l'on n'a pas besoin de parenthèses non plus, comme le montrent les autres réponses. Note à moi-même: Arrêtez de sur-ingénierie vos RegEx et testez vos réponses avant de les poster. : P Ceci est correct:

new RegExp('^bla.+a$', 'i'); 
4

Un '*' signifie {0,} ou "0 ou plus" du caractère précédent. Qu'est-ce que vous essayez de faire devrait être

^bla.*a$ 

modifier: manqué le « se termine par« une » partie de la question précédente.

+1

Juste ajouter $ à la fin de cette regex, sinon il correspond également "blatraddd" – Kamarey

+0

Manqué cette partie dans la question Corrigé :) – aditya

0

Votre regex correspond aux lettres bl au début de la ligne suivie par zéro ou plusieurs a « s puis un a (ce qui équivaut à un ou plusieurs a » s) avec éventuellement des caractères suivants qui. blatr correspond à cela.

Pour faire ce que vous voulez faire (si je comprends bien, utilisez:

'^bla.*a'

Les * moyens répéter le caractère précédent zéro ou plusieurs fois