Comparaison de deux chaine javascript
Résolu/Fermé
A voir également:
- Comparer deux chaine de caractere en javascript
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Caractères spéciaux : comment taper des |—[©\½→}… - Guide
- Chaine tnt gratuite sur mobile - Guide
- Plus de chaine tv - Guide
4 réponses
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
14 déc. 2009 à 09:24
14 déc. 2009 à 09:24
Salut,
argh ! mets des points dans tes phrases stp :P
En JavaScript, on a des fonctions tellement puissantes sur String qu'on finit par oublier l'existence des caractères.
Je vois au moins deux solutions. La première passe par une expression régulière (Regular Expression, abrégé RegExp) : tu transformes la deuxième chaîne en RegExp en ajoutant le drapeau 'g' (pour 'global'), comme ceci :
Puis tu utilises la méthode match() de String sur chaine1, qui va te renvoyer une sorte de tableau, dont on peut récupérer la taille :
Mais si les RegExp te dépassent, on peut utiliser une méthode plus intuitive avec la méthode indexOf. Seul problème, cette méthode n'existe pas sous IE… Je donne le code et j'explique après.
indexOf renvoie la position de la chaîne recherchée, dans la chaîne examinée, en regardant à partir du nombre passé en 2me paramètre. Par exemple :
on regarde si aiguille apparaît dans botteDeFoin à partir du 3me caractère.
Si indexOf ne trouve rien, elle renvoie -1, c'est pourquoi mon while compare position avec -1.
Je reste dispo pour les questions ;)
argh ! mets des points dans tes phrases stp :P
En JavaScript, on a des fonctions tellement puissantes sur String qu'on finit par oublier l'existence des caractères.
Je vois au moins deux solutions. La première passe par une expression régulière (Regular Expression, abrégé RegExp) : tu transformes la deuxième chaîne en RegExp en ajoutant le drapeau 'g' (pour 'global'), comme ceci :
// on a récupéré au préalable les deux chaînes à comparer, chaine1 et chaine2 var maRegExp = new RegExp(chaine2, 'g');
Puis tu utilises la méthode match() de String sur chaine1, qui va te renvoyer une sorte de tableau, dont on peut récupérer la taille :
var cpt = chaine1.match(maRegExp).length;
Mais si les RegExp te dépassent, on peut utiliser une méthode plus intuitive avec la méthode indexOf. Seul problème, cette méthode n'existe pas sous IE… Je donne le code et j'explique après.
var cpt = 0, position = chaine1.indexOf(chaine2); while (position > -1) { cpt++; position = chaine1.indexOf(chaine2, position+1); }
indexOf renvoie la position de la chaîne recherchée, dans la chaîne examinée, en regardant à partir du nombre passé en 2me paramètre. Par exemple :
botteDeFoin.indexOf(aiguille, 3);
on regarde si aiguille apparaît dans botteDeFoin à partir du 3me caractère.
Si indexOf ne trouve rien, elle renvoie -1, c'est pourquoi mon while compare position avec -1.
Je reste dispo pour les questions ;)
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
14 déc. 2009 à 19:36
14 déc. 2009 à 19:36
Alors.
Un conseil, je vois que tu as Firefox, installe Firebug, c'est très utile pour développer en JavaScript !
Je commence par initialiser mes variables.
- cpt contiendra le nombre de fois où chaine2 apparaît dans chaine1,
- position est un nombre égal à l'index du premier caractère de chaine2 trouvé dans chaine1, et c'est comme les tableaux : le 1er caractère est à l'indice 0, le 2me à 1, etc.
Par exemple, essaye :
Une fois que l'initialisation est faite, on a deux cas possibles :
1/ indexOf n'a pas trouvé chaine2 dans chaine1, donc position == -1. À ce moment-là, on n'entre pas dans le while et cpt est égal à 0.
2/ indexOf a trouvé quelque chose, donc on commence le while en faisant cpt++ pour dire qu'on a trouvé au moins une fois. Ensuite on refait une recherche indexOf, mais en commençant après position, pour voir la suite de la chaîne 1. Et ainsi de suite jusqu'à ce que ça s'arrête.
Au final, cpt est égal au nombre de fois qu'indexOf a trouvé quelque chose.
C'est plus clair ? :)
Un conseil, je vois que tu as Firefox, installe Firebug, c'est très utile pour développer en JavaScript !
Je commence par initialiser mes variables.
- cpt contiendra le nombre de fois où chaine2 apparaît dans chaine1,
- position est un nombre égal à l'index du premier caractère de chaine2 trouvé dans chaine1, et c'est comme les tableaux : le 1er caractère est à l'indice 0, le 2me à 1, etc.
Par exemple, essaye :
"azerty".indeoxOf("erty"); // renvoie 2
Une fois que l'initialisation est faite, on a deux cas possibles :
1/ indexOf n'a pas trouvé chaine2 dans chaine1, donc position == -1. À ce moment-là, on n'entre pas dans le while et cpt est égal à 0.
2/ indexOf a trouvé quelque chose, donc on commence le while en faisant cpt++ pour dire qu'on a trouvé au moins une fois. Ensuite on refait une recherche indexOf, mais en commençant après position, pour voir la suite de la chaîne 1. Et ainsi de suite jusqu'à ce que ça s'arrête.
Au final, cpt est égal au nombre de fois qu'indexOf a trouvé quelque chose.
C'est plus clair ? :)
7 juin 2011 à 14:21
c'est formidable et bien expliqué en plus