Bonjour,
Existe-t-il une fonction permettant d'avoir le nombre de fois qu'un caractère bien identifié est présent dans une phrase?
Par exemple, dans la phrase : La vie est un fleuve tranquille
Il y a 4 fois la lettre L
Merci
Bonjour,
Existe-t-il une fonction permettant d'avoir le nombre de fois qu'un caractère bien identifié est présent dans une phrase?
Par exemple, dans la phrase : La vie est un fleuve tranquille
Il y a 4 fois la lettre L
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 function getNumChars(str, char) { return str.match(new RegExp(char,'ig')).length; }
oui ou un poil moins gourmands:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 function getNumChars(str, char) { return str.split(char).length -1 ; }
split accepte une expression régulière en argument, donc :
affiche bien 2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 function getNumChars(str, char) { return str.split(char).length -1 ; } alert(getNumChars('Toto', /t/i))
c'était pas spécifié mais ça se règle rapidement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part return str.toLowerCase().split(char.toLowerCase()).length -1 ;}
exactement
pendant ce temps, j'ai profité pour faire des tests avec ce code :
résultats :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 function getNumCharsMatchRegExp(str, chr) { return str.match(new RegExp(chr,'ig')).length; } function getNumCharsMatchLowerCase(str, chr) { return str.toLowerCase().match(new RegExp(chr.toLowerCase(),'g')).length; } function getNumCharsSplitRegExp(str, chr) { return str.split(new RegExp(chr,'ig')).length - 1; } function getNumCharsSplitLowerCase(str, chr) { return str.toLowerCase().split(chr.toLowerCase()).length - 1; } window.onload = function() { console.time('createarray'); var str = new Array(1000000).join('i'); console.timeEnd('createarray'); console.time('getNumCharsMatchRegExp'); console.log(getNumCharsMatchRegExp(str, 'i')); console.timeEnd('getNumCharsMatchRegExp'); console.time('getNumCharsMatchLowerCase'); console.log(getNumCharsMatchLowerCase(str, 'i')); console.timeEnd('getNumCharsMatchLowerCase'); console.time('getNumCharsSplitRegExp'); console.log(getNumCharsSplitRegExp(str, 'i')); console.timeEnd('getNumCharsSplitRegExp'); console.time('getNumCharsSplitLowerCase'); console.log(getNumCharsSplitLowerCase(str, 'i')); console.timeEnd('getNumCharsSplitLowerCase'); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 createarray: 145ms 999999 getNumCharsMatchRegExp: 320ms 999999 getNumCharsMatchLowerCase: 354ms 999999 getNumCharsSplitRegExp: 137ms 999999 getNumCharsSplitLowerCase: 60ms
ce n'est pas si étonnant vu que tu crées à chaque fois une new RegExp
la regexp est créée une seule fois mon coco, regarde bien le code, il prend en paramètres le résultat de new RegExp, mais il est bien connu que les regExp c'est plus lent en traitement que la chose la plus simple comme un split sur caractère simple par exemple.
Tu vois bien que la fonction est appelée UNE SEULE FOIS et elle se prend donc une regexp directement en paramètre et joue avec derrière
Arf en effet je ne sais pas pourquoi je suis aller imaginer que la creation de la reg etait dans une boucle
il faudrait tester la solution de de Beef qui a mon avis doit etre intermédiaire niveau perfs
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager