HOWTO · TypeScript
Vérifier si une chaîne a un certain texte dans TypeScript
Ce didacticiel montre comment vérifier si une chaîne contient un certain texte dans TypeScript.
Sur cette page
Utilisez includes() pour vérifier directement si une chaîne TypeScript contient une sous-chaîne : la méthode renvoie un booléen. Utilisez indexOf() si vous avez aussi besoin de la position de la correspondance, et search() ou RegExp.test() si la condition repose sur une expression régulière. Ces méthodes distinguent les majuscules des minuscules, sauf si vous normalisez explicitement le texte ou utilisez un motif insensible à la casse.
Les extraits exécutables utilisent une syntaxe JavaScript également valide en TypeScript. Vous pouvez donc les coller dans un fichier TypeScript sans configuration particulière liée à la transpilation.
Utiliser includes() pour vérifier directement la présence d’une sous-chaîne
Utilisez includes() pour obtenir directement un résultat booléen : la méthode renvoie true si la chaîne recherchée contient la sous-chaîne fournie, et false dans le cas contraire. Pour une simple vérification de présence, ce résultat booléen facile à lire est généralement le bon choix.
Pour obtenir ce résultat, appelez includes() sur la chaîne dans laquelle vous voulez effectuer la recherche. L’argument est le texte recherché.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
const message = "TypeScript string search";
const query = "string";
const containsQuery = message.includes(query);
console.log(containsQuery);
true
Le résultat est true, car la sous-chaîne exacte, écrite en minuscules, apparaît dans message. Par exemple, rechercher "String" renverrait false : includes() ne modifie pas la casse et n’effectue pas de comparaison adaptée à une langue. Si la casse ne doit pas compter pour vos données, normalisez les deux valeurs avant de les comparer, comme dans la dernière section.
Utiliser indexOf() pour obtenir la position de la correspondance
indexOf() recherche la première occurrence d’une sous-chaîne dans la chaîne sur laquelle on l’appelle et renvoie sa position, qui commence à zéro. En l’absence de correspondance, la méthode renvoie -1. Pour convertir ce résultat en booléen, comparez-le explicitement à -1 : tester directement le nombre dans une condition if traiterait mal une correspondance à la position 0, car zéro est une valeur fausse.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
const message = "TypeScript string search";
const query = "TypeScript";
const position = message.indexOf(query);
const containsQuery = position !== -1;
console.log(position, containsQuery);
0 true
Ici, le premier caractère se trouve à la position zéro ; la comparaison indique donc correctement qu’il y a une correspondance. Utilisez la position si vous devez mettre en évidence ou extraire le texte autour de la première occurrence ; utilisez includes() si vous voulez seulement savoir si le texte est présent. Les deux méthodes comparent du texte littéral et distinguent les majuscules des minuscules. Ces méthodes de chaîne considèrent qu’une chaîne de recherche vide est présente. Validez donc séparément la saisie si une requête vide ne doit pas compter comme une correspondance.
Utiliser search() pour rechercher des correspondances avec une expression régulière
search() renvoie la position de la première correspondance avec une expression régulière, ou -1 si elle n’en trouve aucune. En passant une valeur RegExp, vous indiquez explicitement le motif, comme dans l’exemple ci-dessous. JavaScript convertit également un argument de type chaîne en expression régulière. Une chaîne passée à search() reste donc une syntaxe de motif : la méthode ne recherche pas du texte littéral comme le fait includes(). Sa valeur numérique suit la même règle de comparaison avec -1 que indexOf().
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
const message = "Order 42 is ready";
const position = message.search(/\d+/);
console.log(position);
6
L’expression /\d+/ correspond à un ou plusieurs chiffres, et search() renvoie la position de début de cette correspondance. Par exemple, la chaîne "42" est convertie en expression régulière et correspond à ces chiffres comme à un motif. Si vous avez seulement besoin d’un résultat oui ou non pour un motif, RegExp.test() exprime cette intention plus directement.
Utiliser RegExp.test() pour vérifier un motif
Appelez test() sur une expression régulière pour obtenir un booléen indiquant si l’entrée correspond au motif. Un littéral d’expression régulière est un choix sûr et concis lorsque le motif fait partie de votre code. Les expressions régulières peuvent représenter des classes de caractères, des répétitions et des alternatives qu’une recherche de sous-chaîne littérale ne peut pas exprimer.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
const message = "TypeScript string search";
const pattern = /TypeScript/;
const matches = pattern.test(message);
console.log(matches);
true
Lorsqu’un motif provient d’une variable, construire un RegExp interprète des caractères comme ., * et [ comme de la syntaxe d’expression régulière. Si la variable représente du texte littéral, échappez d’abord ces caractères :
const userText = "price (USD)";
const escapedText = userText.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
const literalPattern = new RegExp(escapedText);
const found = literalPattern.test("The price (USD) is listed");
console.log(found);
true
Cela empêche la ponctuation de userText de modifier le sens de la recherche littérale prévue. Évitez les indicateurs g et y si vous appelez test() plusieurs fois pour obtenir un simple résultat booléen : ces indicateurs rendent la correspondance dépendante de l’état mutable lastIndex de l’expression régulière.
Gérer la casse et rechercher plusieurs termes
includes(), indexOf() et les expressions régulières distinguent les majuscules des minuscules, sauf si vous choisissez une autre méthode de comparaison. Pour une recherche simple de sous-chaîne insensible à la casse, normalisez les deux chaînes de la même manière. toLowerCase() convient à de nombreux identifiants de programmation et aux textes anglais, mais ne remplace pas universellement une comparaison linguistique adaptée à la langue.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
const message = "TypeScript makes text checks clear";
const query = "TYPESCRIPT";
const containsQuery = message.toLowerCase().includes(query.toLowerCase());
const candidates = ["JavaScript", "TypeScript", "Python"];
const containsCandidate = candidates.some((item) =>
message.includes(item)
);
console.log(containsQuery, containsCandidate);
true true
La première vérification ignore la casse en normalisant les deux côtés. L’appel à some() vérifie si au moins un terme candidat apparaît dans le message ; il s’arrête dès qu’il trouve une correspondance. Utilisez plutôt every() si tous les termes de la liste doivent être présents. Décidez explicitement si les termes de recherche vides sont acceptables avant d’utiliser ces modèles, car une sous-chaîne vide correspond à toutes les chaînes. Choisissez includes() pour vérifier la présence d’un texte littéral, indexOf() si la position compte, et search() ou RegExp.test() si vous devez vérifier un motif.