Expressions rationnelles JavaScript et objet RegExp
Bonjour à tous, aspirants programmeurs ! Aujourd'hui, nous allons entreprendre un voyage passionnant dans le monde des Expressions rationnelles (RegEx) en JavaScript. Ne vous inquiétez pas si vous n'avez jamais entendu parler de RegEx auparavant - nous allons commencer par les bases et progresser pas à pas. D'ici la fin de ce tutoriel, vous serez capable de manier la puissance de RegEx comme un pro !
Qu'est-ce que les Expressions rationnelles ?
Les Expressions rationnelles, souvent abrégées en RegEx, sont des outils puissants pour le filtrage et la manipulation de chaînes de caractères. Pensez-y comme une langue spéciale pour décrire des motifs dans le texte. Elles sont comme un couteau suisse pour travailler avec des chaînes de caractères - polyvalentes et incroyablement utiles !
Commençons par un exemple simple :
let pattern = /hello/;
let text = "Hello, world!";
console.log(pattern.test(text)); // Output: false
Dans cet exemple, /hello/
est notre motif RegEx, et nous testons s'il correspond au texte "Hello, world!". Le résultat est false
car RegEx est sensible à la casse par défaut.
Objet RegExp
En JavaScript, nous pouvons créer des motifs RegEx en utilisant l'objet RegExp. Voici comment faire :
let pattern1 = new RegExp("hello");
let pattern2 = /hello/;
console.log(pattern1.test("hello world")); // Output: true
console.log(pattern2.test("hello world")); // Output: true
Les deux méthodes de création d'un objet RegExp sont équivalentes. La notation littérale (/pattern/
) est plus couramment utilisée en raison de sa simplicité.
Modificateurs
Les modificateurs nous permettent de changer comment un motif RegEx se comporte. Jetons un œil à quelques modificateurs courants :
Modificateur | Description |
---|---|
i | Correspondance insensible à la casse |
g | Correspondance globale (trouver toutes les correspondances, pas seulement la première) |
m | Correspondance multiligne |
Voici un exemple utilisant le modificateur 'i' :
let pattern = /hello/i;
let text = "Hello, World!";
console.log(pattern.test(text)); // Output: true
Maintenant, notre motif correspond à "Hello" indépendamment de la casse !
Crochets
Les crochets en RegEx sont utilisés pour définir un ensemble ou une plage de caractères à correspondre :
Crochet | Description |
---|---|
[abc] | Correspond à n'importe quel caractère dans les crochets |
[^abc] | Correspond à n'importe quel caractère en dehors des crochets |
[0-9] | Correspond à n'importe quel chiffre de 0 à 9 |
[a-z] | Correspond à n'importe quelle lettre minuscule |
Voyons un exemple :
let pattern = /[aeiou]/;
console.log(pattern.test("hello")); // Output: true
console.log(pattern.test("why")); // Output: false
Ce motif correspond à n'importe quel voyelle. Il trouve une correspondance dans "hello" mais pas dans "why".
Quantificateurs
Les quantificateurs spécifient combien d'instances d'un caractère, d'un groupe ou d'une classe de caractères doivent être présents pour qu'une correspondance soit trouvée.
Quantificateur | Description |
---|---|
* | 0 ou plus d'occurrences |
+ | 1 ou plus d'occurrences |
? | 0 ou 1 occurrence |
{n} | Exactement n occurrences |
{n,} | n ou plus d'occurrences |
{n,m} | Entre n et m occurrences |
Voici un exemple amusant :
let pattern = /ba+/;
console.log(pattern.test("b")); // Output: false
console.log(pattern.test("ba")); // Output: true
console.log(pattern.test("baaaa")); // Output: true
Ce motif correspond à "ba" suivi de n'importe quel nombre supplémentaire de "a". C'est comme le mugissement d'une brebis : "baaaa" !
Caractères littéraux
Les caractères littéraux en RegEx sont exactement ce qu'ils sont - ils correspondent à eux-mêmes. Par exemple, /hello/
correspond à la séquence exacte de caractères "hello".
let pattern = /hello world/;
console.log(pattern.test("hello world")); // Output: true
console.log(pattern.test("hello earth")); // Output: false
Méta-caractères
Les méta-caractères ont des significations spéciales en RegEx :
Méta-caractère | Description |
---|---|
. | Correspond à n'importe quel caractère unique |
\d | Correspond à n'importe quel chiffre |
\D | Correspond à n'importe quel non-chiffre |
\w | Correspond à n'importe quel caractère alphabétique |
\W | Correspond à n'importe quel non-caractère alphabétique |
\s | Correspond à n'importe quel caractère d'espacement |
\S | Correspond à n'importe quel non-caractère d'espacement |
Voyons quelques exemples utilisant des méta-caractères :
let pattern = /\d{3}-\d{3}-\d{4}/;
console.log(pattern.test("123-456-7890")); // Output: true
console.log(pattern.test("abc-def-ghij")); // Output: false
Ce motif correspond à un format typique de numéro de téléphone américain.
Propriétés de RegExp
Les objets RegExp ont plusieurs propriétés utiles :
Propriété | Description |
---|---|
global | Si le drapeau "g" est défini |
ignoreCase | Si le drapeau "i" est défini |
multiline | Si le drapeau "m" est défini |
source | Le texte du motif |
lastIndex | L'index à partir duquel commencer la prochaine correspondance |
Voici comment utiliser ces propriétés :
let pattern = /hello/gi;
console.log(pattern.global); // Output: true
console.log(pattern.ignoreCase); // Output: true
console.log(pattern.source); // Output: "hello"
Méthodes de RegExp
Enfin, regardons quelques méthodes que nous pouvons utiliser avec les objets RegExp :
Méthode | Description |
---|---|
exec() | Exécute une recherche pour une correspondance dans une chaîne |
test() | Teste pour une correspondance dans une chaîne |
toString() | Retourne une représentation en chaîne du regexp |
Voici un exemple utilisant exec()
:
let pattern = /\d+/g;
let text = "I have 2 apples and 3 oranges.";
let match;
while ((match = pattern.exec(text)) !== null) {
console.log(`Found ${match[0]} at index ${match.index}`);
}
// Output:
// Found 2 at index 7
// Found 3 at index 23
Ce code trouve tous les nombres dans le texte et signale leurs positions.
Et voilà ! Nous avons couvert les bases des Expressions rationnelles en JavaScript. Souvenez-vous, la pratique rend parfait. Essayez de créer vos propres motifs et de les tester. Avant de vous en rendre compte, vous utiliserez RegEx pour résoudre toutes sortes de problèmes de manipulation de chaînes de caractères avec facilité !
Bonne programmation, et puissent vos Expressions rationnelles toujours trouver leur correspondance !
Credits: Image by storyset