Visit Mozilla.org

Guide JavaScript 1.5:Travailler avec les expressions rationnelles

Un article de MDC.


[modifier] Travailler avec les expressions rationnelles

Les expressions rationnelles sont utilisées avec les méthodes test et exec de RegExp, et avec les méthodes match, replace, search et split de String. Ces méthodes sont expliquées en détail dans la Référence de JavaScript 1.5 Core.

Méthode Description
exec Une méthode de RegExp qui effectue une recherche de correspondance dans une chaîne. Elle renvoie un tableau de valeurs.
test Une méthode de RegExp qui teste la correspondance d'une chaîne. Elle renvoie true ou false.
match Une méthode de String qui effectue une recherche de correspondance dans une chaîne. Elle renvoie un tableau de valeurs ou null en cas d'échec.
search Une méthode de RegExp qui teste la correspondance d'une chaîne. Elle renvoie l'index de la capture, ou -1 en cas d'échec.
replace Une méthode de String qui effectue une recherche de correspondance dans une chaîne, et remplace la sous-chaîne capturée par la chaîne de remplacement.
split Une méthode de String qui utilise une expression rationnelle ou une chaîne pour diviser une chaîne en un tableau de sous-chaînes.

Tableau 4.2 : Méthodes utilisant les expressions rationnelles

Quand vous voulez savoir si un masque a trouvé une correspondance dans une chaîne, utilisez les méthodes test ou search ; pour obtenir des informations supplémentaires (mais un temps d'exécution plus long), utilisez les méthodes exec ou match. Si vous utilisez exec ou match et si la capture est réussie, ces méthodes retourneront un tableau et mettront à jour les variables de l'objet RegExp associé. Si la capture échoue, la méthode exec renverra null (qui se convertit en false).

Dans cet exemple, le script utilise la méthode exec pour trouver une correspondance dans une chaîne.

<script type="text/javascript">
  monExpr = /d(b+)d/g;
  monTableau = monExpr.exec("cdbbdbsbz");
</script>

Si vous n'avez pas besoin d'accéder aux propriétés de l'expression rationnelle, il y a une autre façon de créer monTableau dans ce script :

<script type="text/javascript">
  monTableau = /d(b+)d/g.exec("cdbbdbsbz");
</script>

Si vous voulez construire une expression rationnelle à partir d'une chaîne de caractères, il existe encore une autre alternative :

<script type="text/javascript">
  monExpr = new RegExp ("d(b+)d", "g");
  monTableau = monExpr.exec("cdbbdbsbz");
</script>

Avec ces scripts, la capture réussit et renvoie un tableau, tout en mettant à jour les propriétés présentées dans le tableau ci-dessous.

Objet Propriété ou Index Description Dans cet exemple
monTableau   La chaîne capturée ainsi que les sous-chaînes conservées en mémoire. ["dbbd", "bb"]
  index L'index de la capture dans la chaîne (commence à 0). 1
  input La chaîne d'origine. "cdbbdbsbz"
  [0] La dernière capture. "dbbd"
monExpr lastIndex L'index de départ de la prochaine capture. (Cette variable n'est disponible que si l'expression rationnelle utilise l'option g, décrite dans Exécution de recherches globales, ignorer la casse, utilisation de chaînes multilignes) 5
  source Le masque d'origine. Mis à jour à la création de l'expression rationnelle, et non lors de son exécution. "d(b+)d"

Tableau 4.3 : Résultats de l'exécution d'une expression rationnelle.

Comme montré dans le second exemple, il est possible d'utiliser une expression rationnelle créée à l'aide du contructeur d'objets sans l'assigner à une variable. Cependant, dans ce cas, chaque occurence crée une nouvelle expression rationnelle ; si vous utilisez cette technique, vous ne pouvez pas accéder aux propriétés de cette expression rationnelle. Par exemple, examinez ce script :

<script type="text/javascript">
  monExpr = /d(b+)d/g;
  monTableau = monExpr.exec("cdbbdbsbz");
  document.writeln("La valeur de lastIndex est " + monExpr.lastIndex);
</script>

Ce script affiche:

La valeur de lastIndex est 5

Cependant, si l'on avait ce script :

<SCRIPT type="text/javascript">
  monTableau = /d(b+)d/g.exec("cdbbdbsbz");
  document.writeln("La valeur de lastIndex est " + /d(b+)d/g.lastIndex);
</SCRIPT>

On obtiendrait :

La valeur de lastIndex est 0

Les occurences de /d(b+)d/g dans les deux instructions sont deux expressions rationnelles différentes et elles possèdent des valeurs différentes pour leur propriété lastIndex. Si vous voulez accéder aux propriétés d'une expression rationnelle, vous devez donc d'abord l'assigner à une variable.