Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

REMPLACER UN MOT DANS UNE CHAINE


Information sur la source

Catégorie :Formulaire Classé sous : remplacer, mot, chaine, replace, rc Niveau : Initié Date de création : 08/12/2007 Vu : 4 881

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

Description

Bonjour,

N'aimant pas travailler avec les expressions régulières sous javascript, voici une fonction parallèle qui remplace toute les occurences d'un mot dans une chaine.
 

Source

  • function RC(chaine, quoi, par)
  • {i=0;k=0;r="";match=false;
  • while(i<chaine.length){c=chaine.charAt(i);
  • if(c==quoi.charAt(k)){match=true;k++;}
  • else{if(match==true){for(z=i-k; z<i; z++)
  • {r=r+chaine.charAt(z);}}
  • match=false;k=0;};if(match==false){r=r+c;
  • i++;}else{if(k==quoi.length){r=r+par;
  • match=false;k=0;}i++;}}return r;}
  • ///////////////////////////
  • /* Exemple d'utilisation */
  • function smileys(chaine)
  • {
  • chaine = RC(chaine, ":o)", "01")
  • alert(chaine);
  • }
  • <input type="text" id="chaine">
  • <input type="button" value="test" onclick="smileys(document.getElementById('chaine').value);">
function RC(chaine, quoi, par)
{i=0;k=0;r="";match=false;
while(i<chaine.length){c=chaine.charAt(i);
if(c==quoi.charAt(k)){match=true;k++;} 
else{if(match==true){for(z=i-k; z<i; z++)
{r=r+chaine.charAt(z);}}
match=false;k=0;};if(match==false){r=r+c;
i++;}else{if(k==quoi.length){r=r+par;
match=false;k=0;}i++;}}return r;}

///////////////////////////
/* Exemple d'utilisation */

function smileys(chaine)
{
 chaine = RC(chaine, ":o)", "01")
 alert(chaine);
}

<input type="text" id="chaine">
<input type="button" value="test" onclick="smileys(document.getElementById('chaine').value);">

Conclusion

Veuillez excuser mon codage un peu sec pour la fonction RC
 

Commentaires et avis

signaler à un administrateur
Commentaire de FraGag le 08/12/2007 20:34:05

Qu'est-ce qui ne va pas avec ceci ?

var machaine = "test :o)";
machaine = machaine.replace(":o)", "01");

Le premier argument de replace peut être une chaîne ou une expression régulière et son deuxième argument peut être une chaîne ou une fonction.

Voir http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:String:replace

signaler à un administrateur
Commentaire de askil2000 le 09/12/2007 15:05:11

SAlut FraGag,

Fonction parallèle qui remplace toute les occurences d'un mot dans une chaine.

LE CODE SUIVANT EST FAUX
/////////////////////////////////////////////////////////
var machaine = "première occurence :o) deuxième occurence :o)";
machaine = machaine.replace(":o)", "01");
document.write(machaine);
/////////////////////////////////////////////////////////

LE CODE SUIVANT EST FAUX
/////////////////////////////////////////////////////////
var re = /:o)/gi;
var str = "Apples :o) are round, and :o) apples are juicy.";
var newstr = str.replace(re, "01");
document.write(newstr);
/////////////////////////////////////////////////////////

- Ma fonction est rapide et efficace, inutile de chercher à
mettre des /g ou /i

- Ma fonction peut être modifiée à l'infini et permettre d'autres traitements plus intéressants.

Avant de mettre un commentaire disant avoir résolue en 3 lignes ma fonction, essayez de comprendre le code et sa méthode de travail par balayage, qui examine lettre par lettre et qui ensuite en trouvant la première du mot à remplacer, fais un deuxième balayage pour voir si le mot correspond.

function RC(chaine, quoi, par)
{
i=0;
k=0;
r="";
match=false;
while(i<chaine.length)
{
  c=chaine.charAt(i);
  if(c==quoi.charAt(k))
  {
   match=true;
   k++;
  }
  else
  {
   if(match==true)
   {
    for(z=i-k; z<i; z++)
    {
     r=r+chaine.charAt(z);
    }
   }
   match=false;
   k=0;
  }
  if(match==false)
  {
   r=r+c;
   i++;
  }
  else
  {
   // ici le traitement de remplacement
   // si le mot correspond
   if(k==quoi.length)
   {
    r=r+par; // on remplace
    match=false;
    k=0;
   }
   i++;
  }
}
return r;
}

signaler à un administrateur
Commentaire de ircland le 09/12/2007 16:30:06

Pourquoi ne pas utilisé le PHP... beaucoups plus simple ya une fonction deja tous fait...

Disons que la variable  $message est ta chaine...

$message = "Bonjour TEST ca TEST va TEST bien ?";
//la on modifi la chaine...
$message = str_replace("TEST", "yop", $message);
// ta chaine est modifier... tous les TEST par yop
//donc $message maintenent devien "Bonjour yop ca yop va yop bien ?"
si tu veux tous modifier les A par la suite tu fait
$message = str_replace("a", "Z", $message);
//tous les devien des Z
//donc message vaut "Bonjour yop cZ yop vZ yop bien ?"


donc tu voie... pour des smile c le meme principe...
et tous ton code devien une ligne...


UTILISATION de str_replace

$var = str_replace("QUOI", "PAR", $CHAINE);

voila :) la simplicité née!

signaler à un administrateur
Commentaire de FraGag le 09/12/2007 17:26:26

askil2000> En effet, j'avais oublié que replace() ne remplaçait que la première occurence. Personnellement, je me suis mis à apprendre comment fonctionnent les expressions régulières et je trouve ça plus facile, mais tout le monde n'est pas comme moi.

signaler à un administrateur
Commentaire de askil2000 le 09/12/2007 18:07:15

re:

///////////////////////////////////////////////
ircland > Bah voyons du php en javascript, on aura tout vu...

mon application est une application flash > mais comment j'vais faire avec ton script PHP ????????
pour écrire un smiley de façon dynamique et intélligente ????
sans rafraichissement de page ??????
sans requettes http ?????

arffff !!! vadé rétro satanas

mon code c'est du terminator pure, repérage de cible
MATCH > vérification des bottes
MATCH > vérification des chaussures
MATCH > vérification du blousson

ALL MATCH > terminator say:

je veux tes bottes, tes chaussures, ton blouson et ta moto

///////////////////////////////////////////////
FraGag > les expressions régulières (beurk !)

signaler à un administrateur
Commentaire de Arto_8000 le 10/12/2007 03:31:34

Il y a toujours le classique qui fait la même chose en 1 ligne de code.

String.prototype.replaceAll =  function (seek, replace)
{
    return this.split(seek).join(replace);
}

"test:o".replaceAll(":o","txt"); // Retourne testtxt

signaler à un administrateur
Commentaire de ircland le 10/12/2007 03:47:20

pas du php en javascript je disais de prendre php au lieu... et comment tu voulais je sache que c'est pour du flash ...

signaler à un administrateur
Commentaire de valneandre le 10/12/2007 10:21:52 10/10

Bonjour Askil 2000
C'est un excellent code, qui m'a bien rendu service.
Je l'ai immédiatement intégré à l'interface utilisateur de mes sites, pour que celui qui dépose un texte puisse facilement y ajouter des balises genre h1, h2, etc..., qui se placent automatiquement en début et fin de la partie de texte sélectionnée.
Merci beaucoup
Richard BACH

signaler à un administrateur
Commentaire de bultez le 10/12/2007 14:10:04

certes certes...
mais pourquoi tant de haine envers les expressions régulières  :o)

document.getElementById('chaine').value =
document.getElementById('chaine').value.replace(/:o\)/g, '01');

c'est y pas "plus simple" ? 1 ligne.
probablement beaucoup plus rapide...
@+

signaler à un administrateur
Commentaire de Palleas_44 le 10/12/2007 15:25:41

Pour ma part tu réinventes la roue, mais c'est mon point de vue, je préfère le code de Arto_8000, beaucoup plus pertinent et logique je pense ^^"

signaler à un administrateur
Commentaire de askil2000 le 10/12/2007 17:27:17

La fameuse expression tu réinventes la roue me plait bien.

C'est exactement ça, je réinvente la roue pour que les pro du développement puisse passer à un niveau inférieur, et que les juniors continue à utiliser les blocs sans rien comprendre à la technique des maths appliqués.

Les blocs, des blocs, des blocs nous permettent aucune personalisation! s'qui fait qu'aujourd'hui n'importe qui peut se prendre pour un développeur en utilisant BBCODE ou d'autres variantes.

Je ne suis pas faché avec l'évolution de la prog, bien au contraire, mais la condition première est d'avoir des bases
solides et qu'on soit un minimum attentif à un résonnement logique.

Conclusion: cette source est pour les initiés, et pas pour les codeurs en herbe.

/////////////////////////////////
Arto_8000
je n'ai pas testé ton code et j'avoue qu'il correspond bien à une routine flash. Merci pour cette information utile qui je pense ne pourra pas m'aider pour la suite de mon application hélasse.
/////////////////////////////////

Quand j'aurais résolu mon application, je mettrais un exemple d'utilisation de ma fonction (en détail), qui permettra de comprendre aux inités uniquement, l'une des nombreuses variantes.

/////////////////////////////////
valneandre
Merci de m'avoir noté aussi bien, c'est toujours plaisant d'avoir un peu de reconnaissance.
/////////////////////////////////

BONNE PROG À TOUS !

signaler à un administrateur
Commentaire de hvb le 19/12/2007 11:11:13

"Conclusion: cette source est pour les initiés, et pas pour les codeurs en herbe."

Qui-a-t'il d'initié à imbriquer deux boucles et des tests conditionel?
Je te trouve bien arrogant pour quelqu'un qui poste un code si simple et si peu original...

Et tiens... :

function replacez(str1,str2,strz)
{
var i=0
while (i!=-1)
{
i=strz.indexOf(str1,i);
if (i>=0)
{
strz=strz.substring(0,i)+str2+strz.substring(i+str1.length);
i+=str2.length;
}
}
return strz
}

6 fois plus rapide à l'execution (j'ai pris le temps de tester...sous ff avec une chaine de 5ko).
Si ta fonction est "rapide et efficace", alors la mienne est... magique?? non...
Pourtant je ne proclame en rien que mon code soit l'ultime solution, il est écrit super vite, et je pense que les regex sont bien plus efficaces... mais je te trouve juste bien trop sur de toi.
A+ l'initié.

signaler à un administrateur
Commentaire de askil2000 le 21/12/2007 11:15:13

Bonjour,

Hé bien hvb, content de voir une fonction supplémentaire qui marche. J'ai pensé utiliser les indexOf et substring bien avant de faire l'autre fonction, mais pour le coté pratique j'ai préféré utiliser les while, if et boolean.

"Qui-a-t'il d'initié à imbriquer deux boucles et des tests conditionnels ?"

- Maintenant, je ne pense pas qu'un débutant puisse comprendre le code, ni même le modifier, c'est pour cette raison qu'il s'adresse aux initiés et non aux débutants. (qui peuvent biensure l'utiliser)

"Je te trouve bien arrogant pour quelqu'un qui poste un code si simple et si peu original..."

- Si mon code est si simple et si peu original, pourquoi ne trouve-t-on pas le tien sur ce site ?

"Pourtant, je ne proclame en rien que mon code soit l'ultime solution"

- Moi non plus, juste une solution supplémentaire qui n'utilise pas les regex (pour ceux qui savent lire tout en haut) "fonction parallèle qui remplace toutes les occurrences d'un mot dans une chaîne."

"Mais je te trouve juste bien trop sur de toi."

- Oui, dans la vie il faut être sur de sois, sinon on n'arrive à rien.

Bonne prog ;)

signaler à un administrateur
Commentaire de hvb le 21/12/2007 12:12:48

Allez je me permet un troll... :)

"mais pour le coté pratique j'ai préféré utiliser les while, if et boolean."
Le... coté pratique?? Je ne vois pas ce qu'il y a de pratique à écrire un code plus long à l'execution (et à l'écriture) que sa première idée...

"Maintenant, je ne pense pas qu'un débutant puisse comprendre le code, ni même le modifier, c'est pour cette raison qu'il s'adresse aux initiés et non aux débutants"
Quelqu'un qui ne sait pas lire deux boucles imbriquées et 3 tests conditionnels, ce n'est pas un débutant, c'est un leecheur de code ^^

"Si mon code est si simple et si peu original, pourquoi ne trouve-t-on pas le tien sur ce site ?"
Parce que j'estime justement que cela ne merite pas la création d'une nouvelle source pour si peu...

"Oui, dans la vie il faut être sur de sois, sinon on n'arrive à rien."
Être sur de soi quand on a pas spécialement raison n'aide à rien, sauf à se décrédibiliser ;)

signaler à un administrateur
Commentaire de askil2000 le 21/12/2007 13:59:22

re

Conclusion, quand on a 2 008 pts sur CS et qu'on code en VB,
on peut se permettre de se prendre pour un dieu:

"Je te trouve bien arrogant pour quelqu'un qui poste un code si simple et si peu original..."

"Si ta fonction est "rapide et efficace", alors la mienne est... magique?? non..."

"Allez je me permet un troll... :)"

"Quelqu'un qui ne sait pas lire deux boucles imbriquées et 3 tests conditionnels, ce n'est pas un débutant, c'est un leecheur de code ^^"

- Et aussi d'estimer que tout le monde est au même niveau hein ?

"Parce que j'estime justement que cela ne mérite pas la création d'une nouvelle source pour si peu..."

- Mais ou l'intérêt de CS si on laisse le jugement des soi-disant dieux de la prog ?

- Ne voulant pas commencer une phrase par je, pour éviter toute suspicion devant les dieux, j'implore Sa Majesté
de bien vouloir m'excuser pour ce code déjà utilisé par un développeur de 57 ans(valneandre). Sur ceux, je ne vais faire de ce post un chat. LAST MESSAGE!

PS: hvb, tu devrais te prendre un peu moins au sérieux, sa t'éviterais d'avoir mal aux chevilles.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Remplacer des expression dans un saisie [ par IIznogoud ] Bonjours , j'aimerai savoir comment faire pour "transformer" certain mot d'un formulaire en d'autre mot.Le gars post par exemple &lt;b&gt; bonjours &l remplacer tous les occurences d'un motif dans une chaîne [ par zarzar ] bonjour je souhaiterais pouvoir remplacer toutes les occurences une sous-cha&#238;ne par une autre dans une chaine exemple : j'ai ma chaine str cont Smileys [ par piep14 ] Bonjour, je souhaite ajouter dans un forum des smileys, les stocker dans une base de donn&#233;es puis les r&#233;afficher avec le message. J'ai essay Expression régulière : Remplacer un texte par un autre mais en évitant les liens hypertextes [ par kiwithereturn ] Bonjour,Je sollicite votre aide sur un problème d'expression régulière que je ne maitrise pas du tout.Mon objectif : Filtrer sur un forum, avec Javasc MOT DE PASSE PAGE WEB [ par must77 ] Voici le code que j'ai inséré dans une page html :&lt;script Language="JavaScript"&gt;&lt;!--var password = '';password=prompt('Veuillez entrer votre javascript [ par must77 ] J'ai inseré un java script dans un site pour accèder à une page web avec mot de passe.Mais ça ne fonctionne pas sur tous les postes. Sur certains ok remplacer un message d'attente par un message d'erreur au bout d'une minute [ par mobilotek ] salut!jai un script php, qui est un peu long a s'executer, et avant de le lancer, j'affiche un div qui fait patienter l'utilisateur jusqu'a la fin.je Petit problème: petite solution [ par taxitat ] Bonjour à tous,Voilà, j'ai un tout petit problème. Dans mon script, je termine par:document.write(line.replace(/1/g, 'grand').replace(/2/g,'petit'));C Problème avec window.location.replace sous firefox [ par wadpap13 ] Bonjour à tous !!J'ai un petit soucis sur Firef remplacer ok du bouton d'alerte [ par rduvrac ] Bonjour peux t on remplacer la valeur des boutons dans un message d'alerte ? j'ai ce code : choix = confirm("Vous n avez pas rempli le champ"); if


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,811 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.