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
nomFichier.lastIndexOf(".")renvoie12, la position du dernier point dans la chaîne.nomFichier.substring(0, 12)extrait les caractères de l’index0jusqu’à l’index12(sans l’inclure), ce qui produit"rapport-2024".nomFichier.substring(13)omet l’argument de fin, donc l’extraction va de l’index13jusqu’à la fin de la chaîne, et renvoie"csv".- Les deux appels renvoient de nouvelles chaînes :
nomFichiern’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
| Comportement | substring(start, end) | slice(start, end) |
|---|---|---|
| Arguments négatifs | Limités à 0 | Comptent depuis la fin de la chaîne |
start > end | Permutés automatiquement | Renvoie une chaîne vide "" |
| Index hors limites | Limité à string.length | Limité à string.length |
| Modifie la chaîne d’origine | Non | Non |
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é :
- Remplacez
str.substr(start, length)parstr.substring(start, start + length). - Si
startpeut être négatif, passez àslice(start, start + length)à la place, carsubstringlimite les valeurs négatives à0. - Testez les cas limites où
lengthvaut0, est négatif, ou est omis, carsubstretsubstringdivergent 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.