Travailler avec les expressions rationnelles

  • Raccourci de la révision : JavaScript//Guide/Travailler_avec_les_expressions_rationnelles
  • Titre de la révision : Travailler avec les expressions rationnelles
  • ID de la révision : 190079
  • Créé :
  • Créateur : BenoitL
  • Version actuelle ? Non
  • Commentaire +noinclude

Contenu de la révision

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. {{mediawiki.external('\"dbbd\", \"bb\"')}}
  index L'index de la capture dans la chaîne (commence à 0). 1
  input La chaîne d'origine. "cdbbdbsbz"
  {{mediawiki.external(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.

{{wiki.template('PrécédentSuivant', [ "Guide_JavaScript_1.5:Écriture d\'un masque d\'expression rationnelle", "Guide JavaScript 1.5:Travailler avec les expressions rationnelles:Utilisation des parenthèses de capture" ])}}

{{ wiki.languages( { "en": "en/Core_JavaScript_1.5_Guide/Working_with_Regular_Expressions", "ja": "ja/Core_JavaScript_1.5_Guide/Working_with_Regular_Expressions", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Praca_z_wyra\u017ceniami_regularnymi" } ) }}

Source de la révision

<div class="noinclude"></div>
<ul><li> <a href="fr/Guide_JavaScript_1.5/Travailler_avec_les_expressions_rationnelles/Utilisation_des_parenth%c3%a8ses_de_capture">Utilisation des parenthèses de capture</a>
</li><li> <a href="fr/Guide_JavaScript_1.5/Travailler_avec_les_expressions_rationnelles/Ex%c3%a9cution_de_recherches_globales%2c_ignorer_la_casse%2c_utilisation_de_cha%c3%aenes_multilignes">Exécution de recherches globales, ignorer la casse, utilisation de chaînes multilignes</a>
</li><li> <a href="fr/Guide_JavaScript_1.5/Travailler_avec_les_expressions_rationnelles/Exemples_d'expressions_rationnelles">Exemples d'expressions rationnelles</a>
</li></ul>
<h3 name="Travailler_avec_les_expressions_rationnelles"> Travailler avec les expressions rationnelles </h3>
<p>Les expressions rationnelles sont utilisées avec les méthodes <code>test</code> et <code>exec</code> de <code>RegExp</code>, et avec les méthodes <code>match</code>, <code>replace</code>, <code>search</code> et <code>split</code> de <code>String</code>. Ces méthodes sont expliquées en détail dans la <a href="fr/R%c3%a9f%c3%a9rence_de_JavaScript_1.5_Core">Référence de JavaScript 1.5 Core</a>.
</p>
<table class="fullwidth-table">
<tbody><tr>
<th>Méthode</th>
<th>Description</th>
</tr>
<tr>
<td><a class="external" href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:RegExp:exec">exec</a></td>
<td>Une méthode de <code>RegExp</code> qui effectue une recherche de correspondance dans une chaîne. Elle renvoie un tableau de valeurs.   </td>
</tr>
<tr>
<td><a class="external" href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:RegExp:test">test</a>
</td><td>Une méthode de <code>RegExp</code> qui teste la correspondance d'une chaîne. Elle renvoie <code>true</code> ou <code>false</code>.  </td>
</tr>
<tr>
<td><a class="external" href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:String:match">match</a>
</td><td>Une méthode de <code>String</code> qui effectue une recherche de correspondance dans une chaîne. Elle renvoie un tableau de valeurs ou <code>null</code> en cas d'échec.  </td>
</tr>
<tr>
<td><a class="external" href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:String:search">search</a>
</td><td>Une méthode de <code>RegExp</code> qui teste la correspondance d'une chaîne. Elle renvoie l'index de la capture, ou <code>-1</code> en cas d'échec.  </td>
</tr>
<tr>
<td><a class="external" href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:String:replace">replace</a>
</td><td>Une méthode de <code>String</code> qui effectue une recherche de correspondance dans une chaîne, et remplace la sous-chaîne capturée par la chaîne de remplacement.  </td>
</tr>
<tr>
<td><a class="external" href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:String:split">split</a>
</td><td>Une méthode de <code>String</code> qui utilise une expression rationnelle ou une chaîne pour diviser une chaîne en un tableau de sous-chaînes.   </td>
</tr>
</tbody></table>
<p><small><b>Tableau 4.2 : Méthodes utilisant les expressions rationnelles </b></small>
</p><p>Quand vous voulez savoir si un masque a trouvé une correspondance dans une chaîne, utilisez les méthodes <code>test</code> ou <code>search</code> ; pour obtenir des informations supplémentaires (mais un temps d'exécution plus long), utilisez les méthodes <code>exec</code> ou <code>match</code>. Si vous utilisez <code>exec</code> ou <code>match</code> et si la capture est réussie, ces méthodes retourneront un tableau et mettront à jour les variables de l'objet <code>RegExp</code> associé. Si la capture échoue, la méthode <code>exec</code> renverra <code>null</code> (qui se convertit en <code>false</code>).
</p><p>Dans cet exemple, le script utilise la méthode <code>exec</code> pour trouver une correspondance dans une chaîne.
</p>
<pre>&lt;script type="text/javascript"&gt;
  monExpr = /d(b+)d/g;
  monTableau = monExpr.exec("cdbbdbsbz");
&lt;/script&gt;
</pre>
<p>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 <code>monTableau</code> dans ce script :
</p>
<pre>&lt;script type="text/javascript"&gt;
  monTableau = /d(b+)d/g.exec("cdbbdbsbz");
&lt;/script&gt;
</pre>
<p>Si vous voulez construire une expression rationnelle à partir d'une chaîne de caractères, il existe encore une autre alternative :
</p>
<pre>&lt;script type="text/javascript"&gt;
  monExpr = new RegExp ("d(b+)d", "g");
  monTableau = monExpr.exec("cdbbdbsbz");
&lt;/script&gt;
</pre>
<p>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.
</p>
<table class="fullwidth-table">
<tbody><tr>
<th>Objet</th>
<th>Propriété ou Index</th>
<th>Description</th>
<th>Dans cet exemple</th>
</tr>
<tr>
<td><code>monTableau</code></td>	
<td> </td>
<td>La chaîne capturée ainsi que les sous-chaînes conservées en mémoire.  </td>
<td><code>{{mediawiki.external('\"dbbd\", \"bb\"')}}</code></td>
</tr>
<tr>
<td> </td>
<td><code>index</code></td>
<td>L'index de la capture dans la chaîne (commence à 0).  </td>
<td><code>1</code>  </td>
</tr>
<tr>
<td> </td>
<td>input</td>
<td>La chaîne d'origine.  </td>
<td><code>"cdbbdbsbz"</code>  </td>
</tr>
<tr>
<td> </td>
<td><code>{{mediawiki.external(0)}}</code></td>
<td>La dernière capture.  </td>
<td><code>"dbbd"</code>  </td>
</tr>
<tr>
<td><code>monExpr</code> 	</td>
<td><code>lastIndex</code></td>
<td>L'index de départ de la prochaine capture. (Cette variable n'est disponible que si l'expression rationnelle utilise l'option <code>g</code>, décrite dans <a href="fr/Guide_JavaScript_1.5/Travailler_avec_les_expressions_rationnelles/Ex%c3%a9cution_de_recherches_globales%2c_ignorer_la_casse%2c_utilisation_de_cha%c3%aenes_multilignes">Exécution de recherches globales, ignorer la casse, utilisation de chaînes multilignes</a>)  </td>
<td><code>5</code>  </td>
</tr>
<tr>
<td> </td>
<td><code>source</code></td>
<td>Le masque d'origine. Mis à jour à la création de l'expression rationnelle, et non lors de son exécution.  </td>
<td><code>"d(b+)d"</code></td>
</tr>
</tbody></table>
<p><small><b>Tableau 4.3 : Résultats de l'exécution d'une expression rationnelle.</b></small>
</p><p>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 :
</p>
<pre>&lt;script type="text/javascript"&gt;
  monExpr = /d(b+)d/g;
  monTableau = monExpr.exec("cdbbdbsbz");
  document.writeln("La valeur de lastIndex est " + monExpr.lastIndex);
&lt;/script&gt;
</pre>
<p>Ce script affiche:
</p>
<pre>La valeur de lastIndex est 5
</pre>
<p>Cependant, si l'on avait ce script :
</p>
<pre>&lt;SCRIPT type="text/javascript"&gt;
  monTableau = /d(b+)d/g.exec("cdbbdbsbz");
  document.writeln("La valeur de lastIndex est " + /d(b+)d/g.lastIndex);
&lt;/SCRIPT&gt;
</pre>
<p>On obtiendrait :
</p>
<pre>La valeur de lastIndex est 0
</pre>
<p>Les occurences de <code>/d(b+)d/g</code> dans les deux instructions sont deux expressions rationnelles différentes et elles possèdent des valeurs différentes pour leur propriété <code>lastIndex</code>. Si vous voulez accéder aux propriétés d'une expression rationnelle, vous devez donc d'abord l'assigner à une variable.
</p>
<div class="noinclude">
<p>{{wiki.template('PrécédentSuivant', [ "Guide_JavaScript_1.5:Écriture d\'un masque d\'expression rationnelle", "Guide JavaScript 1.5:Travailler avec les expressions rationnelles:Utilisation des parenthèses de capture" ])}}
</p>
</div>
{{ wiki.languages( { "en": "en/Core_JavaScript_1.5_Guide/Working_with_Regular_Expressions", "ja": "ja/Core_JavaScript_1.5_Guide/Working_with_Regular_Expressions", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Praca_z_wyra\u017ceniami_regularnymi" } ) }}
Revenir à cette révision