Rechercher, couper et extraire

Parent Previous Next



Rechercher, couper et extraire



Connaître la position avec indexOf() et lastIndexOf()

La méthode indexOf() est utile dans deux cas de figure :


indexOf() retourne la position du premier caractère trouvé, et s'il n'y en a pas la valeur -1 est retournée.

var myString = 'Le JavaScript est plutôt cool';

var result = myString.indexOf('JavaScript');

 

if (result > -1) {

    alert('La chaîne contient le mot "Javascript" qui débute à la position ' + result);

}


Ce code a pour but de savoir si la chaîne myString contient la chaîne « JavaScript ». La position de la première occurrence de la chaîne recherchée est stockée dans la variable result. Si result vaut -1, alors la chaîne n'a pas été trouvée. Si, en revanche, result vaut 0 (le premier caractère) ou une autre valeur, la chaîne est trouvée.


Si indexOf() retourne la position de la première occurrence trouvée, lastIndexOf() retourne la position de la dernière.

Notons que ces deux fonctions possèdent chacune un deuxième argument qui permet de spécifier à partir de quel index la recherche doit commencer.


Utiliser le tilde avec indexOf() et lastIndexOf()


Une particularité intéressante et extrêmement méconnue du Javascript est son caractère tilde ~. Il ne sert qu'à une seule chose, incrémenter la valeur qui le suit et y ajouter une négation, comme ceci :

alert(~2);  // Affiche : « -3 »

alert(~3);  // Affiche : « -4 »

alert(~-2); // Affiche : « 1 »


Hum... Ça ne servirait pas un peu à rien, ce truc ?


Eh bien pas tant que ça ! Le tilde est effectivement très peu utile en temps normal, mais dans le cadre d'une utilisation avec les deux méthodes étudiées, il est redoutablement efficace pour détecter si une chaîne de caractères contient un caractère ou un morceau de chaîne. En temps normal nous ferions comme ceci :

var myString = 'Le JavaScript est plutôt cool';

 

if (myString.indexOf('JavaScript') != -1) {

    alert('La chaîne contient bien le mot "Javascript".');

}


Mais au final il est possible d'ajouter un simple petit tilde ~ à la ligne 3 :

var myString = 'Le JavaScript est plutôt cool';

 

if (~myString.indexOf('JavaScript')) {

    alert('La chaîne contient bien le mot "Javascript".');

}


En faisant cela, dans le cas où le résultat serait -1, celui-ci va alors se retrouver incrémenté et arriver à 0, ce qui donnera donc une évaluation à false pour notre chaîne de caractères. La valeur -1 étant la seule à pouvoir atteindre la valeur 0 avec le tilde ~, il n'y a pas d'hésitation à avoir vu que tous les autres nombres seront évalués à true !


Oui, cette technique a été conçue pour les parfaits fainéants, mais il y a fort à parier que vous vous en souviendrez. 


Extraire une chaîne avec substring()substr() et slice()


Nous avons vu comment trouver la position d'une chaîne de caractères dans une autre, il est temps de voir comment extraire une portion de chaîne, à partir de cette position.


Considérons cette chaîne :

var myString = 'Thunderseb et Nesquik69';


Le but du jeu va être de récupérer, dans deux variables différentes, les deux pseudonymes contenus dansmyString. Pour ce faire, nous allons utiliser substring()substring(a, b) permet d'extraire une chaîne à partir de la position a (incluse) jusqu'à la position b (exclue).


Pour extraire « Thunderseb », il suffit de connaître la position du premier espace, puisque la position de départ vaut 0 :

var nick_1 = myString.substring(0, myString.indexOf(' '));


Pour « Nesquik69 », il suffit de connaître la position du dernier espace : c'est à ce moment que commencera la chaîne. Comme «Nesquik69 » termine la chaîne, il n'y a pas besoin de spécifier de deuxième paramètre pour substring(), la méthode va automatiquement aller jusqu'au bout :

var nick_2 = myString.substring(myString.lastIndexOf(' ') + 1); // Ne pas oublier d'ajouter 1, pour commencer au N et non à l'espace


Une autre manière de procéder serait d'utiliser substr(), la méthode sœur de substring()substr(a, n) accepte deux paramètres : le premier est la position de début, et le deuxième le nombre de caractères à extraire. Cela suppose donc de connaître le nombre de caractères à extraire. Ça limite son utilisation et c'est une méthode que vous ne rencontrerez pas fréquemment, au contraire de substring().


Une dernière méthode d'extraction existe : slice()slice() ressemble très fortement à substring(), mais avec une option en plus. Une valeur négative est transmise pour la position de fin, slice() va extraire la chaîne jusqu'à la fin, en décomptant le nombre de caractères indiqué. Par exemple, si on ne veut récupérer que « Thunder », on peut faire comme ceci :

var nick_1 = 'Thunderseb'.slice(0, -3);


Couper une chaîne en un tableau avec split()


La méthode split() permet de couper une chaîne de caractères à chaque fois qu'une sous-chaîne est rencontrée. Les « morceaux » résultant de la coupe de la chaîne sont placés dans un tableau.

var myCSV = 'Pauline,Guillaume,Clarisse'; // CSV = Comma-Separated Values

 

var splitted = myCSV.split(','); // On coupe à chaque fois qu'une virgule est rencontrée

 

alert(splitted.length); // 3



Dans cet exemple, splitted contient un tableau contenant trois éléments : « Pauline », « Guillaume » et « Clarisse ».


split() peut aussi couper une chaîne à chaque fois qu'un retour à la ligne est rencontré :myString.split(' '). C'est très pratique pour créer un tableau où chaque item contient une ligne.


Créé avec HelpNDoc Personal Edition: Générateur gratuit de livres électroniques et documentation

Site à deux balles