bizarre ce split

Le
p_geni...
Bonjour,

je teste ce bout de javascript avec plusieurs navigateurs

8<
<script type="text/javascript"><!--


var grp = 'fr';
var str = 'fr et france franchit les frames de free';
var pattern = new RegExp(grp);
var myarr = str.split(pattern);
alert('dans "' + str + '" ' + grp +' trouvé ' + myarr.length + '
fois');

//--></script>
8<

J'essaie de compter le nombre d'occurence de 'fr'
dans la phrase 'fr et france franchit les frames de free';
Selon les navigateurs fireFox et Opera la longuer du tableau
myarr est 6
donc on trouve 5 fois la chaine 'fr'


mais selon IE myarr ne compte que 5 éléments
est ce normal que la fonction split ait un comportement
différent selon les navigateurs?

y a-t-il une autre façon de compter le nombre d'une
sous chaine dans une autre.

Merci de votre aide,
Pierre.


--
échangez opinions et commentaires dans les forums de discussion.
http://www.usenetgratuit.com/

  • Partager ce contenu :
Vos réponses Page 1 / 2
Trier par : date / pertinence
Olivier Miakinen
Le #553805

var grp = 'fr';
var str = 'fr et france franchit les frames de free';
var pattern = new RegExp(grp);
var myarr = str.split(pattern);


Tiens ? Pourquoi passer par une RegExp alors que la fonction split prend
une chaîne comme argument ?

var myarr = 'fr et france franchit les frames de free'.split('fr');

J'essaie de compter le nombre d'occurence de 'fr'
dans la phrase 'fr et france franchit les frames de free';
Selon les navigateurs fireFox et Opera la longuer du tableau
myarr est 6
donc on trouve 5 fois la chaine 'fr'

mais selon IE myarr ne compte que 5 éléments
est ce normal que la fonction split ait un comportement
différent selon les navigateurs?


De deux choses l'une :
- soit le passage par une RegExp a un effet de bord bizarre ;
- soit IE ne compte pas la chaîne vide initiale :
'', ' et ', 'ance ', 'anchit les ', 'ames de ', 'ee'

y a-t-il une autre façon de compter le nombre d'une
sous chaine dans une autre.


1)
'fr et france franchit les frames de free'.match(/fr/g).length;
(il faut peut-être traiter à part le cas où "fr" se trouve zéro fois car
le match() retournera null)

2)
var pattern = /fr/g;
pattern.exec('fr et france franchit les frames de free').length;
(idem)

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)

p_geni...
Le #553800
Olivier Miakinen wrote:

Merci pour cette réponse claire.

1)
'fr et france franchit les frames de free'.match(/fr/g).length;
(il faut peut-être traiter à part le cas où "fr" se trouve zéro fois car
le match() retournera null)

2)
var pattern = /fr/g;
pattern.exec('fr et france franchit les frames de free').length;
(idem)


je vais tester avec ces deux fonctions match et exec
et si j'ai de la chance la méthode length devrait
retourner 0 sur un tableau vide.

Pierre.

-----
échangez opinions et commentaires dans les forums de discussion.
http://www.usenetgratuit.com/

p_geni...
Le #553799
Olivier Miakinen wrote:

1)
'fr et france franchit les frames de free'.match(/fr/g).length;
(il faut peut-être traiter à part le cas où "fr" se trouve zéro fois car
le match() retournera null)


avec la méthode match j'ai la même taille avec les trois
navigateurs.

Pierre.
-----
échangez opinions et commentaires dans les forums de discussion.
http://www.usenetgratuit.com/

Dr John Stockton
Le #559672
JRS: In article Oct 2005 22:00:41, seen in news:fr.comp.lang.javascript, Pierre =?ISO-
8859-15?Q?Génieys?=
J'essaie de compter le nombre d'occurence de 'fr'
dans la phrase 'fr et france franchit les frames de free';
Selon les navigateurs fireFox et Opera la longuer du tableau
myarr est 6
donc on trouve 5 fois la chaine 'fr'


Si "fr" est au commencement ou au termination du String, doit-il etre
apres .split("fr") une premiere or derniere element "" ? Pour
quelques browser-auteurs, oui; pour autres, non.

mais selon IE myarr ne compte que 5 éléments
est ce normal que la fonction split ait un comportement
différent selon les navigateurs?

y a-t-il une autre façon de compter le nombre d'une
sous chaine dans une autre.


Oui.

St = 'fr et france franchit les frames de free'
No = St.length - St.replace(/fr/g, "*").length
ou No = (St.length - St.replace(/fr/g, "").length)/"fr".length

Mais combien des "ee" y a-t-il en "Creee"?

--
© John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v4.00 IE 4 ©

le testeur singl
Le #559211
Dr John Stockton wrote:



Mais combien des "ee" y a-t-il en "Creee"?




si j'ai bien compris la question 2 ou 3:



je créé

La cerise est créée



Pierre.
_____________________________________________________

Dr John Stockton
Le #559207
JRS: In article <4367cc80$0$62968$
t>, dated Tue, 1 Nov 2005 20:13:53, seen in
news:fr.comp.lang.javascript, le testeur singlé posted :

Dr John Stockton wrote:

Mais combien des "ee" y a-t-il en "Creee"?


si j'ai bien compris la question 2 ou 3:

je créé

La cerise est créée


Pas bien compris, helas. "ee" != "e"s ; "ee" > "e".

Il-y-a en String "Creee" trois "e", sans doute; mais, pour "ee", apres
on a trouve la premiere "ee" ("Cr ee e"), faut-il chercher une deuxieme
"ee" apres "Cre" ou apres "Cree" ? Peut-etre qu'oui; peut-etre qu'non.
Quelquefois oui, quelquefois non.

--
© John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v4.00 IE 4 ©


Cenekemoi
Le #559205

var grp = 'fr';
var str = 'fr et france franchit les frames de free';
var pattern = new RegExp(grp);
var myarr = str.split(pattern);


Tiens ? Pourquoi passer par une RegExp alors que la fonction split
prend une chaîne comme argument ?

var myarr = 'fr et france franchit les frames de free'.split('fr');


Toutafé, avec une variante qui marche tout le temps: on rajoute
qcquechose en début et fin de chaîne et le nombre d'occurences est donné
(toujours) par "tab.length - 1".

Exemple:

var chaine = 'fr et france franchit les frames de free';

var str = "_"+ chaine +"_";
var myarr = str.split('fr');

alert('nb occ = '+ (myarr.length-1));

Sans avoir tester avec tous, je pense que ce code est
multi-navigateurs...

--
Cordialement, Thierry ;-)


Pierre G
Le #558976
Cenekemoi wrote:

Toutafé, avec une variante qui marche tout le temps: on rajoute
qcquechose en début et fin de chaîne et le nombre d'occurences est donné
(toujours) par "tab.length - 1".


Ok, c'est une bonne idée.
mais côté performances...

est ce plus rapide d'utiliser un match ( /fr/g ) ou un split (/fr/) ?
Pierre.

_____________________________________________________

Cenekemoi
Le #558972
Cenekemoi wrote:

Toutafé, avec une variante qui marche tout le temps: on rajoute
qcquechose en début et fin de chaîne et le nombre d'occurences est
donné (toujours) par "tab.length - 1".


Ok, c'est une bonne idée.
mais côté performances...

est ce plus rapide d'utiliser un match ( /fr/g ) ou un split
(/fr/) ? Pierre.


Franchement, à moins que tu en aies des centaines à faire, je ne pense
pas que cela influe beaucoup.

Sinon, le meilleur moyen de savoir est de tester... ;-)

--
Cordialement, Thierry


Dr John Stockton
Le #558707
JRS: In article <4369091c$0$23498$
t>, dated Wed, 2 Nov 2005 18:44:44, seen in
news:fr.comp.lang.javascript, Pierre Génieys posted :
Ok, c'est une bonne idée.
mais côté performances...

est ce plus rapide d'utiliser un match ( /fr/g ) ou un split (/fr/) ?



Essayez-vous comme ca :-

S = "fr..fr..fr..fr....fr......fr..fr" ;
var J, K = 10000, D1, D2, D3
D1 = new Date()
J = K ; while (J--) L1 = (S.length - S.replace(/fr/g, "").length)/2
D2 = new Date()
J = K ; while (J--) L2 = ("-"+S+"-").split("fr").length - 1
D3 = new Date()

X = [D2-D1, D3-D2, " ", L1, L2]

PII/300, js-quick.htm : Moi, je trouve X = 980,1760, ,7,7 . QED.

--
© John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v4.00 IE 4 ©

Poster une réponse
Anonyme