Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

Caractère littéral : a, b

Baseline
Large disponibilité

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.

Un caractère littéral (literal character en anglais) correspond exactement à lui-même dans le texte d'entrée.

Syntaxe

regex
c

Paramètres

c

Un seul caractère qui n'est pas l'un des caractères de syntaxe décrits ci-dessous.

Description

Dans les expressions rationnelles, la plupart des caractères peuvent apparaître littéralement. Ils constituent généralement les éléments de base les plus simples des motifs. Par exemple, voici un motif tiré de l'exemple supprimer des balises HTML :

js
const motif = /<.+?>/g;

Dans cet exemple, ., + et ? sont appelés caractères de syntaxe. Ils ont des significations particulières dans les expressions rationnelles. Les autres caractères du motif (< et >) sont des caractères littéraux. Ils correspondent à eux-mêmes dans le texte d'entrée : les chevrons gauche et droit.

Les caractères suivants sont des caractères de syntaxe dans les expressions rationnelles et ne peuvent pas apparaître comme caractères littéraux :

Dans les classes de caractères, davantage de caractères peuvent apparaître littéralement. Consultez la page Classe de caractères pour en savoir plus. Par exemple \. et [.] correspondent tous deux à un . littéral. Dans les classes de caractères en mode v, toutefois, d'autres caractères sont réservés à la syntaxe. Le tableau ci-dessous répertorie les caractères ASCII et indique s'ils peuvent apparaître échappés ou non échappés selon le contexte : « ✅ » signifie que le caractère représente lui-même, « ❌ » signifie qu'il provoque une erreur de syntaxe, et « ⚠️ » signifie que le caractère est valide, mais représente autre chose que lui-même.

Caractères Hors des classes de caractères en mode u ou v Dans les classes de caractères en mode u Dans les classes de caractères en mode v
Non échappé Échappé Non échappé Échappé Non échappé Échappé
123456789 "'
ACEFGHIJKLMN
OPQRTUVXYZ_
aceghijklmop
quxyz
✅❌✅❌✅❌
!#%&,:;<=>@`~ ✅❌✅❌✅✅
] ❌✅❌✅❌✅
()[{} ❌✅✅✅❌✅
*+? ❌✅✅✅✅✅
/ ✅✅✅✅❌✅
0DSWbdfnrstvw ✅⚠️✅⚠️✅⚠️
B ✅⚠️✅❌✅❌
$. ⚠️✅✅✅✅✅
| ⚠️✅✅✅❌✅
- ✅❌✅⚠️✅❌⚠️✅
^ ⚠️✅✅⚠️✅✅⚠️✅
\ ❌⚠️✅❌⚠️✅❌⚠️✅

Note : Les caractères qui peuvent être échappés ou non échappés dans les classes de caractères en mode v sont précisément ceux qui sont interdits comme « doubles signes de ponctuation ». Consultez les classes de caractères en mode v pour en savoir plus.

Lorsque vous souhaitez faire correspondre littéralement un caractère syntaxique, vous devez l'échapper avec une barre oblique inversée (\). Par exemple, pour faire correspondre un * littéral dans un motif, vous devez écrire \* dans le motif. L'utilisation de caractères syntaxiques comme caractères littéraux entraîne des résultats inattendus ou des erreurs de syntaxe — par exemple, /*/ n'est pas une expression rationnelle valide, car le quantificateur n'est précédé d'aucun motif. En mode insensible à l'Unicode, ], {, et } peuvent apparaître littéralement s'il est impossible de les analyser comme la fin d'une classe de caractères ou comme des délimiteurs de quantificateur. Il s'agit d'une syntaxe obsolète pour la compatibilité du Web, et vous ne devez pas vous y fier.

Les littéraux d'expression rationnelle ne peuvent pas définir certains caractères littéraux non syntaxiques. / ne peut pas apparaître comme caractère littéral dans un littéral d'expression rationnelle, car / en est le délimiteur. Vous devez l'échapper sous la forme \/ pour faire correspondre un / littéral. Les terminateurs de ligne ne peuvent pas non plus apparaître comme caractères littéraux dans un littéral d'expression rationnelle, car un littéral ne peut pas s'étendre sur plusieurs lignes. Vous devez plutôt utiliser un caractère échappé tel que \n. Il n'y a pas de telles restrictions avec le constructeur RegExp(), bien que les littéraux de chaîne de caractères suivent leurs propres règles d'échappement (par exemple, "\\" représente une seule barre oblique inversée, donc new RegExp("\\*") et /\*/ sont équivalents).

En mode insensible à l'Unicode, le motif est interprété comme une séquence d'unités de code UTF-16. Cela signifie que les paires de substituts représentent réellement deux caractères littéraux. Cela provoque des comportements inattendus lorsqu'elles sont associées à d'autres fonctionnalités :

js
/^[😄]$/.test("😄"); // false, parce que le motif est interprété comme /^[\ud83d\udc04]$/
/^😄+$/.test("😄😄"); // false, parce que le motif est interprété comme /^\ud83d\udc04+$/

En mode sensible à l'Unicode, le motif est interprété comme une séquence de points de code Unicode et les paires de substituts ne sont pas séparées. Vous devez donc toujours privilégier l'indicateur u.

Exemples

Utiliser les caractères littéraux

L'exemple suivant est repris de la page Caractère échappé. Les caractères a et b sont littéraux dans le motif, tandis que \n est un caractère échappé, car il ne peut pas apparaître littéralement dans un littéral d'expression rationnelle.

js
const motif = /a\nb/;
const chaineDeCaracteres = `a
b`;
console.log(motif.test(chaineDeCaracteres)); // true

Spécifications

Spécification
ECMAScript® 2027 Language Specification
# prod-PatternCharacter

Compatibilité des navigateurs

Voir aussi