Essayer de coder ← Retour aux sujets

Créer, mesurer, extraire

string

Un texte s'écrit entre apostrophes, guillemets ou accents graves. Il est immuable : toutes les méthodes renvoient un nouveau texte.

'texte' "texte"
Apostrophes ou guillemets : équivalents
`Bonjour ${nom}`
Chaîne modèle : variables et calculs intégrés, sur plusieurs lignes
s.length
Nombre de caractères (propriété : pas de parenthèses)
s[0] s.at(-1)
Premier / dernier caractère
s.slice(1, 4)
De l'indice 1 inclus à l'indice 4 exclu
s.toUpperCase() s.trim()
Majuscules / sans espaces aux extrémités (nouveau texte)
bases.js
const mot = "Programmation";

console.log(mot.length, mot[0], mot.at(-1));
console.log(mot.slice(3, 7), mot.toUpperCase());
console.log(mot.indexOf("ma"), mot.includes("gram"));
Affichage
13 P n
gram PROGRAMMATION
7 true

Chercher, découper, remplacer

split · replace

Les opérations de tous les jours : tester une présence, couper une ligne, remplacer, compléter, assembler.

s.includes("ion") s.startsWith("Pro") s.endsWith("n")
Tests de présence
s.indexOf("a") s.lastIndexOf("a")
Position de la première / dernière occurrence (-1 si absent)
s.replace("a", "o") s.replaceAll("a", "o")
Remplace la première / toutes les occurrences
s.split(",")
Découpe en tableau de textes
tableau.join("-")
Assemble un tableau en un texte
s.padStart(5, "0") s.repeat(3)
Complète à gauche / répète
decoupe.js
const ligne = "Lina,17,14.5";
const [nom, age, moyenne] = ligne.split(",");

console.log(nom, Number(age) + 1, Number(moyenne) * 2);
console.log("42".padStart(5, "0"), "ab".repeat(3));
console.log("a-b-c".replaceAll("-", "+"));
Affichage
Lina 18 29
00042 ababab
a+b+c

✂️ Le cours : manipuler du texte

Le texte (type string) est partout sur le web : saisies d'un formulaire, contenu d'une page, réponses d'un serveur. JavaScript offre une grande panoplie de méthodes ; l'essentiel est de se rappeler qu'un texte est immuable et que les indices commencent à 0.

Trois façons d'écrire un texte

Apostrophes et guillemets sont équivalents (choisis-en un et reste cohérent ; l'un permet d'écrire l'autre sans échappement : "l'ami"). Les accents graves créent une *chaîne modèle* : on y insère n'importe quelle expression avec ${ … }, et le texte peut occuper plusieurs lignes.

modele.js
const nom = "Lina";
const note = 14.5;
const message = `Bonjour ${nom},
ta note : ${note}/20
(${note >= 10 ? "admise" : "ajournee"})`;

console.log(message);
Affichage
Bonjour Lina,
ta note : 14.5/20
(admise)

Longueur, indices et caractères Unicode

length donne le nombre d'unités de 16 bits du texte, ce qui coïncide avec le nombre de caractères pour le texte courant (accents compris) mais pas pour les émojis, qui en occupent deux. [...texte] (ou Array.from(texte)) découpe en vrais caractères.

unicode.js
console.log("été".length, "😀".length, [..."😀"].length);
Affichage
3 2 1

Un texte est immuable

Aucune méthode ne modifie le texte d'origine (et écrire mot[0] = "N" est sans effet, voire une erreur en mode strict). Pour « changer » un texte, on fabrique un nouveau texte et on le range dans la variable.

immuable.js
let mot = "nsi";

mot.toUpperCase();               // résultat ignoré : mot ne change pas
console.log(mot);
mot = mot.toUpperCase();         // on range le nouveau texte
console.log(mot);
Affichage
nsi
NSI

Chercher et tester

MéthodeRôleRésultat
includes(x)contient x ?true / false
startsWith(x) endsWith(x)commence / finit par x ?true / false
indexOf(x)position de la première occurrenceindice, ou -1
slice(debut, fin)extrait de debut (inclus) à fin (exclu) ; accepte les indices négatifsnouveau texte
charAt(i) at(i)caractère à l'indice i (at accepte -1)texte d'un caractère

Découper et assembler

split(séparateur) coupe un texte en tableau, join(séparateur) fait l'inverse. Avec split("") ou [...texte], on obtient les caractères : c'est ainsi qu'on inverse un texte (inverser le tableau, puis le rassembler). Un séparateur de un espace split(" ") produit des cases vides si les mots sont séparés par plusieurs espaces : une expression régulière comme /\s+/ règle ce cas.

palindrome.js
const mot = "radar";
const inverse = [...mot].reverse().join("");

console.log(inverse, inverse === mot);
console.log("Un deux  trois".split(" ").length, "Un deux  trois".split(/\s+/).length);
Affichage
radar true
4 3

Comparer des textes

=== compare le texte exactement (la casse compte). Pour ignorer la casse, convertis les deux côtés (a.toLowerCase() === b.toLowerCase()). Pour trier ou comparer dans l'ordre alphabétique du français, utilise a.localeCompare(b), qui gère les accents ; l'opérateur < compare les codes Unicode, où "é" vient après "z".

Textes et nombres

Number(texte) convertit (strict), parseInt(texte, base) lit un entier dans une base donnée, nombre.toString(base) écrit un nombre dans une base (2 pour le binaire, 16 pour l'hexadécimal : voir Conversions et Horner), toFixed(n) arrondit à n décimales. Attention à la virgule : Number("12,5") vaut NaN.

conversions.js
console.log((13).toString(2), parseInt("1101", 2), (255).toString(16));
console.log((3.14159).toFixed(2), Number("12,5"), Number("12.5"));
Affichage
1101 13 ff
3.14 NaN 12.5

Aperçu des expressions régulières

Une expression régulière décrit un motif de texte entre barres obliques : \d un chiffre, \d+ un ou plusieurs, \s une espace, [a-z] une lettre minuscule, ^ et $ le début et la fin. La lettre g (*global*) fait agir match et replace sur toutes les occurrences. motif.test(texte) répond par vrai ou faux.

regex.js
const texte = "Rendez-vous le 03/10/2026 à 14h30";

console.log(/\d{2}\/\d{2}\/\d{4}/.test(texte));
console.log(texte.match(/\d+/g).join(" "));
console.log(texte.replace(/\d/g, "#"));
Affichage
true
03 10 2026 14 30
Rendez-vous le ##/##/#### à ##h##
Ne mets pas un texte brut dans innerHTML

Si un texte vient d'un utilisateur, l'insérer avec innerHTML permet d'injecter du code (faille XSS). Utilise textContent, qui traite le texte comme du texte (voir DOM).

⚠️ Erreurs fréquentes

Ignorer le résultat d'une méthode

À éviter
faux.js
nom.trim();             // nom est inchangé
Correct
correct.js
nom = nom.trim();      // on garde le nouveau texte

replace ne remplace que la première occurrence

À éviter
faux.js
"a-b-c".replace("-", "+")        // "a+b-c"
Correct
correct.js
"a-b-c".replaceAll("-", "+")     // "a+b+c"   (ou .replace(/-/g, "+"))

Additionner un texte et un nombre

"3" + 4 vaut "34". Les valeurs lues dans un champ de formulaire sont des textes : convertis-les avec Number(…) avant de calculer (voir Variables et types).

Confondre slice, substring et substr

slice(debut, fin) accepte les indices négatifs ("abc".slice(-2) donne "bc"). substring les traite comme 0 et échange les bornes si elles sont à l'envers. substr est obsolète. Retiens slice.

Une apostrophe qui coupe le texte

À éviter
faux.js
const phrase = 'l'ami de Lina';          // le texte s'arrête après « l »
Correct
correct.js
const phrase = "l'ami de Lina";          // ou 'l\'ami de Lina'

Compter les « lettres » avec length

Les émojis et certaines lettres composées (un e suivi d'un accent combinant) comptent pour plusieurs unités. Pour du texte courant français avec accents précomposés, length convient ; en cas de doute, normalize() ou [...texte].length.

split(".") et les expressions régulières

split accepte un texte simple : "a.b".split(".") coupe bien sur le point. Mais replace et match avec un motif entre barres interprètent . comme « n'importe quel caractère » : échappe-le avec \..

📋 Aide-mémoire

  • Un texte est immuable : s = s.trim(); ; length (propriété), s[i], s.at(-1), s.slice(debut, fin) (fin exclue).
  • Chercher : includes, startsWith, endsWith, indexOf (-1 si absent) ; remplacer : replaceAll (ou /…/g).
  • Découper / assembler : split(","), join("-"), [...texte], padStart, repeat, trim.
  • Chaîne modèle : `Bonjour ${nom}` ; apostrophes et guillemets équivalents.
  • Comparer : === (casse comprise), toLowerCase(), localeCompare pour l'alphabet français.
  • Conversions : Number(…), parseInt(texte, base), n.toString(2), toFixed(2) ; innerHTML jamais avec un texte d'utilisateur.