Programmation JavaScript/Références/Objets/RegExp

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche


A partir de la version 6, prévue pour octobre 2015, d'ECMA-script, les regex unicode seront supportées.

Syntaxe[modifier | modifier le wikicode]

Les expressions rationnelles peuvent être analysées et testées via un débogueur en ligne comme https://regex101.com/.

Expressions rationnelles courantes
Caractère Type Explication
. Point n'importe quel caractère
[...] crochets classe de caractères : tous les caractères énumérés dans la classe, avec possibilité de plages dont les bornes sont séparées par "-". Ex : [0-9a-z] pour tout l'alphanumérique en minuscule, ou [0-Z] pour tous les caractères de la table Unicode entre "0" et "Z", c'est-à-dire l'alphanumérique majuscule plus ":;<=>?@"[1].
[^...] crochets et circonflexe classe complémentée : tous les caractères sauf ceux énumérés.
^ circonflexe marque le début de la chaine, la ligne...
$ dollar marque la fin d'une chaine, ligne...
| barre verticale alternative - ou reconnaît l'un ou l'autre
(...) parenthèses groupe de capture : utilisée pour limiter la portée d'un masque ou de l'alternative
* astérisque 0, 1 ou plusieurs occurrences
+ le plus 1 ou plusieurs occurrences
? interrogation 0 ou 1 occurrence
{...} accolades comptage : détermine un nombre de caractères remplissant les critères qu'il suit. Ex : a{2} deux occurrences de "a", a{1,10} (sans espace) entre une et dix.

Remarques :

  • Les caractères de débuts et fin de chaines (^ et $) ne fonctionnent pas dans [] où ils ont un autre rôle.
  • Les opérateurs * et + sont toujours avides, pour qu'ils laissent la priorité il faut leur apposer un ? à leur suite[2].
Classes de caractères POSIX[3]
Classe Signification
[[:alpha:]] n'importe quelle lettre
[[:digit:]] n'importe quel chiffre
[[:xdigit:]] caractères hexadécimaux
[[:alnum:]] n'importe quelle lettre ou chiffre
[[:space:]] n'importe quel espace blanc
[[:punct:]] n'importe quel signe de ponctuation
[[:lower:]] n'importe quelle lettre en minuscule
[[:upper:]] n'importe quelle lettre capitale
[[:blank:]] espace ou tabulation
[[:graph:]] caractères affichables et imprimables
[[:cntrl:]] caractères d'échappement
[[:print:]] caractères imprimables exceptés ceux de contrôle
Expressions rationnelles Unicode[4]
Expression Signification
\A Début de chaine
\b Caractère de début ou fin de mot
\d Chiffre
\D Non chiffre
\n Fin de ligne
\s Caractères espace
\S Non caractères espace
\t Tabulation
\w Caractère alphanumérique : lettre, chiffre ou underscore
\W Caractère qui n'est pas lettre, chiffre ou underscore
\X Caractère Unicode
\z Fin de chaine

Constructeurs spéciaux : Ces fonctions précèdent l'expression à laquelle elles s'appliquent, et le tout doit être placé entre parenthèses.

  • ?: : groupe non capturant. Ignorer le groupe de capture lors de la numérotation des backreferences. Exemple : ((?:sous-chaine_non_renvoyée|autre).).
  • ?> : groupe non capturant indépendant.
  • ?<= : positive lookbehind.
  • ?<! : negative lookbehind.
  • ?= : positive lookahead.
  • ?! : negative lookahead. Exclusion d'une chaine. Il faut toujours la faire suivre d'un point. Exemples :
    ((?!sous-chaine_exclue).)
    <(?!body).*> : pour avoir toutes les balises HTML sauf "body".
    début((?!\mot_exclu).)*fin[5] : pour rechercher tout ce qui ne contient pas un mot entre deux autres.

Méthodes[modifier | modifier le wikicode]

  • exec()
appliquer une expression régulière
  • test()
appliquer une expression régulière pour essayer
  • match()
appliquer une expression régulière pour sortir occurrence
  • replace()
appliquer une expression régulière pour remplacer

Recherche[modifier | modifier le wikicode]

La fonction RegExp contient deux paramètres : la chaine à traiter et facultativement, le type de traitement : "g" (global), "i" (ignorer la casse) ou "gi".

<SCRIPT language=javascript>
var chaine="Test regex Javascript pour Wikibooks francophone.";
var expression=new RegExp("Wikibooks","g");
if (chaine.match(expression))
	document.write("Le texte parle de Wikibooks");
else
	document.write("Le texte ne parle pas de Wikibooks"); 
</SCRIPT>

Remplacement[modifier | modifier le wikicode]

<SCRIPT language=javascript>
// Remplace tous les espaces par des underscores
var chaine="Test regex Javascript pour Wikibooks francophone.";
var expression=new RegExp("( )", "g");
document.write("Chaîne d'origine : " + chaine + "<BR>");
document.write("Chaîne traitée : " + chaine.replace(expression,"_") + "<BR>");
</SCRIPT>

Logo Depuis ES6, le regex est natif en JS.


Références[modifier | modifier le wikicode]

  • https://unicode-table.com/fr/
  • https://docstore.mik.ua/orelly/webprog/pcook/ch13_05.htm
  • https://www.regular-expressions.info/posixbrackets.html
  • http://www.regular-expressions.info/unicode.html
  • https://www.regextester.com/15