2010-05-06 4 views
0

Puis-je connaître la raison pour laquelle la sortie du code suivant est: 1,10,10? Pourquoi pas c'est comme: 10, 10?Confusion dans JavaScript RegExp? Quantifier

<script type="text/javascript"> 
var str="1, 100 or 1000?"; 
var patt1=/10?/g; 
document.write(str.match(patt1)); 
</script> 
+0

@Dusk: que vouliez-vous ou que vous attendiez de la sortie? – KooiInc

Répondre

4

Parce que le ? est un caractère spécial dans regex, il est un opérateur fait le seul élément avant d'option. Ainsi, /10?/ correspond à un 1 suivi éventuellement d'un 0. Par conséquent pourquoi il peut correspondre à peu 1, ou 10 100, ou 10 en 1000.

1

c'est un handy cheat sheet for reg expressions.

le bit que vous avez besoin est au milieu:

  • 0 ou plus de matches = *
  • 0 ou 1 matches =?
  • 1 ou plusieurs correspondances = +

vous pouvez voir les différents effets ceux-ci ont, en utilisant votre code, here

0

Il semble que vous pouvez être source de confusion la priorité

/10?/ 

Cette s'applique ? uniquement à 0. Si vous voulez 10 être modifié avec ?, alors vous auriez à grouper:

/(10)?/ 

Ou, si vous n'avez pas besoin de saisir:

/(?:10)?/ 

De même,

/ab+/ 

Correspondances abbbbbb. Si vous voulez faire correspondre ababab, alors vous devriez écrire:

/(?:ab)+/ 
0

fixe:

/10+\?/g 
1

? est un méta-caractère signifiant zéro-ou-plus de correspondances.

Pour correspondre à «?», Échapper.

var pat = /10\?/g;