JavaScript substring : extraire du texte par index

La méthode JavaScript substring extrait les caractères entre deux positions d’index et renvoie une nouvelle chaîne. Elle accepte un index de début et un index de fin optionnel (exclusif), puis récupère tout ce qui va de start jusqu’à end sans inclure end. Si l’index de fin est omis, l’extraction continue jusqu’à la fin de la chaîne. Contrairement à slice, substring permute automatiquement ses arguments quand start est supérieur à end, ce qui évite des résultats vides inattendus.

Exemple JavaScript substring pour extraire du texte

Sortie :

La sortie apparaîtra ici...

Sortie :

Nom : rapport-2024
Extension : csv

Comment cet exemple fonctionne

  1. nomFichier.lastIndexOf(".") renvoie 12, la position du dernier point dans la chaîne.
  2. nomFichier.substring(0, 12) extrait les caractères de l’index 0 jusqu’à l’index 12 (sans l’inclure), ce qui produit "rapport-2024".
  3. nomFichier.substring(13) omet l’argument de fin, donc l’extraction va de l’index 13 jusqu’à la fin de la chaîne, et renvoie "csv".
  4. Les deux appels renvoient de nouvelles chaînes : nomFichier n’est jamais modifié, car les chaînes JavaScript sont immuables.

Erreurs courantes avec JavaScript substring

Penser que les indices négatifs comptent depuis la fin.

Faux :

"hello".substring(-3); // "hello", pas "llo"

Correct :

"hello".slice(-3); // "llo"

substring limite les valeurs négatives à 0, donc substring(-3) devient substring(0) et renvoie la chaîne entière. Utilisez slice pour les décalages depuis la fin.

Traiter le second argument comme une longueur.

Faux :

"abcdef".substring(2, 3); // "c", pas "cde"

Correct :

"abcdef".substring(2, 5); // "cde"

Le deuxième paramètre est un index de fin, pas un nombre de caractères. Cette confusion vient souvent de l’ancienne méthode substr(start, length), où "abcdef".substr(2, 3) renvoie "cde". Lors d’une migration depuis substr, convertissez la longueur en index de fin : start + length.

JavaScript substring vs slice

Comportementsubstring(start, end)slice(start, end)
Arguments négatifsLimités à 0Comptent depuis la fin de la chaîne
start > endPermutés automatiquementRenvoie une chaîne vide ""
Index hors limitesLimité à string.lengthLimité à string.length
Modifie la chaîne d’origineNonNon

Utilisez substring quand les indices viennent de calculs qui peuvent arriver dans le mauvais ordre : la permutation automatique garantit un résultat valide. Utilisez slice quand les décalages négatifs sont intentionnels, par exemple pour extraire les N derniers caractères avec str.slice(-N).

Remplacer l’ancien substr par substring

L’ancienne méthode substr(start, length) (souvent appelée JavaScript substr) apparaît encore dans du code historique et est dépréciée dans la documentation. La confusion JavaScript substr substring vient généralement du sens différent du deuxième argument : substr prend une longueur, alors que substring prend un index de fin. Pour migrer en sécurité :

  1. Remplacez str.substr(start, length) par str.substring(start, start + length).
  2. Si start peut être négatif, passez à slice(start, start + length) à la place, car substring limite les valeurs négatives à 0.
  3. Testez les cas limites où length vaut 0, est négatif, ou est omis, car substr et substring divergent sur ces entrées.

FAQ

Quelle différence entre JavaScript substring et slice ?

Les deux extraient une partie d’une chaîne par index, mais diffèrent sur les cas limites. substring limite les arguments négatifs à 0 et permute start/end quand start est plus grand. slice traite les valeurs négatives comme des décalages depuis la fin et renvoie une chaîne vide quand start dépasse end. Pour une extraction standard avec des indices croissants, les deux produisent le même résultat.

Est-ce que JavaScript substring modifie la chaîne d’origine ?

Non. Les chaînes JavaScript sont immuables : chaque méthode de chaîne renvoie une nouvelle valeur. La chaîne d’origine reste inchangée après n’importe quel appel à substring. Affectez le résultat à une variable pour conserver la portion extraite.

Que se passe-t-il quand start est supérieur à end dans substring ?

substring permute silencieusement les deux arguments. "abcdef".substring(4, 1) se comporte comme "abcdef".substring(1, 4) et renvoie "bcd". Cette normalisation évite des surprises avec des chaînes vides quand un calcul d’index inverse les bornes.