IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[RegExp] Ajout de *


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Par défaut [RegExp] Ajout de *
    Bonjour,
    je cherche à ajouter "*" à chaque mot (séparé par un ou plusieurs espaces, tabulation...) d'une liste. Mais ne pas mettre d'étoile derrière les mots qui sont entre guillemets.
    Donc
    Java ajax "internet explorer" firefox
    Devrait donner
    Java* ajax* "internet explorer" firefox*
    J'ai déjà ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function searchpad(searchtext)
    {
    	return(searchtext.replace(/\s+/gi, "* "));
    }
    Qui me remplace les espaces par "* "
    ce qui donne:
    * Java* ajax* "internet* explorer"* firefox*
    et ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function searchpad(searchtext)
    {
    	return(searchtext.replace(/".*"/g, "$$$"));
    }
    qui me remplace ce qui se trouve entre guillemets par "$$"
    ce qui donne
    Java ajax $$ firefox

    Mais je bloque là.
    Avez-vous une idée pour finaliser ? (il faudrait de regExp ne mette pas d'étoile au début, skip le contenu des guillemets et ne mette pas d'étoile après la deuxième guillemet)
    Merci d'avance.

  2. #2
    Membre Expert Avatar de Barsy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    1 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 484
    Par défaut
    je te conseille de spliter ta chaine avec le caractère guillemet et ensuite de n'appliquer la transformation qu'à la partie qui n'est pas entre guillemet

    un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function searchpad(searchtext) {
    var tableau = searchtext.split('"');
    var resultat = '';
    for(var i = 0; i < tableau.length; i++2) {
    tableau[i].replace(/\s+/gi, '* ');
    }
    for (var i = 0; i < tableau.length; i++) {
    resultat = resultat + tableau[i];
    }
    }

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Par défaut
    Barsy, merci pour l'idée.
    Je suis en train de la creuser.
    J'ai pour le moment ceci:
    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
    function searchpad(searchtext) 
    {
    	var tableau = searchtext.split('"');
    	var resultat = '';
    	for(var i = 0; i < tableau.length; i++) 
    	{
    		if(i%2 == 0)
    		{
    			tableau[i] = tableau[i].replace(/\s+/gi, '* ');
    		}
    		else
    		{
    			tableau[i] = "\""+tableau[i]+"\"";
    		}
    	}
    	for (var i = 0; i < tableau.length; i++) 
    	{
    		resultat = resultat + tableau[i];
    	}
    	return(resultat);
    }
    qui me donne :
    * Java* ajax* "internet explorer"* firefox
    Ce qui est déjà mieux.
    Il ne me reste plus qu'à enlever "* " devant Java et firefox ainsi que rajouter "*" derrière firefox.
    Avez-vous une proposition?
    Merci d'avance.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    searchtext='internet   "firfox"   '
     
    alert(searchtext.replace(/(["])?\1\s /gi, "* " ));
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    et pour prévoir l'eventualité d'un mot en fin de chaine avec ou sans guillements..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(searchtext.replace(/((["]?)\2\s+)|(([."])?\4)$/gi, "*  "));
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Par défaut
    Super !
    RegExp m’étonnera toujours…
    N’ayant pas voulu vous noyer avec des détails, je n’ai pas mis tout le contexte. Le voici :
    J’aimerai que le visiteur qui veut faire une recherche sur mon site ait comme réponse toutes le pages contenant les mots introduits (séparés par des espaces) mais aussi tous les mots qui commencent par les mots introduits. Donc si le visiteur veut faire une recherche sur java, il aura toutes les pages traitant de java mais aussi celles traitant de javascript. Mais s’il met des guillemets, il faut faire la recherche sur les mots exacts. Maintenant, à force d’essayer, je découvre des effets de bord. Par exemple, si le visiteur met malgré tout un *, il ne faut pas en mettre un autre. Le visiteur pourrait par inadvertance mettre plusieurs espaces entre les mots. Le visiteur pourrait mettre un nombre impair de guillemets. Le visiteur pourrait commencer par un ou plusieurs espaces. Et sans doute encore bien d’autres…

    SpaceFrog, ta proposition transforme
    Java ajax "Internet Explorer" firefox* Linux (j'ai mis un espace avant Java)
    En
    * Java* ajax* "Internet* Explorer"* firefox** Linux*
    Ce qui est déjà très bien. Merci.
    Comme je ne suis pas spécialiste en RegExp, je ne sais pas quoi faire pour poursuivre l’idée RegExp (toutes propositions sont les bienvenues), j’ai donc continué sur ma lancée.

    Le script suivant
    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
    function trim(texte)
    {
       var temp = texte.replace(/(^\s*)/g,"");// Remove blank before the string
       return (temp.replace(/(\s*$)/g," "));// Add a blank after the string
    }
    function searchpad(searchtext) 
    {
    	var tableau = searchtext.split('"');//Splits on double quote
    	var resultat = '';
    	for(var i = 0; i < tableau.length; i++) 
    	{
    		if(i%2 == 0)//For strings outside double quote
    		{
    			tableau[i] = trim(tableau[i])//Remove blank before and a 1 blank after the string
    			if(tableau[i] != " ")//if there is something in it
    			{
    				tableau[i] = tableau[i].replace(/\s+/gi, '* ');//Change all kind of blanc (\f,\n,\t," "...) with "* "
    				tableau[i] = tableau[i].replace('**', '*');// Replace "**" with "*" in case that the visitor had put a * after the word
    			}
    		}
    		else//For strings inside double quote => Do nothing
    		{
    			if(tableau[i] != "")
    			{
    				tableau[i] = "\""+tableau[i]+"\" ";//Except putting back the removed double quotes
    			}
    		}
    	}
    	for (var i = 0; i < tableau.length; i++) //Put back the array to string
    	{
    		resultat = resultat + tableau[i];
    	}
    	return(resultat);
    }
    Transforme
    Java ajax "Internet Explorer" firefox* Linux
    En
    Java* ajax* "Internet Explorer" firefox* Linux*
    Ce qui devrait convenir pour le moment mais je trouve cette solution très inélégante et sans doute pas bien optimalisée.
    Merci pour votre aide.

Discussions similaires

  1. RegExp : Problem avec ajout de retour a la ligne
    Par Roming22 dans le forum Linux
    Réponses: 3
    Dernier message: 12/01/2006, 19h44
  2. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 17h03
  3. [VB6] [ADO] Pb ajout enregistrement table liée
    Par fikou dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/10/2002, 11h49
  4. Connaitre l'unitée à ajouter dans USES
    Par DelphiCool dans le forum Langage
    Réponses: 7
    Dernier message: 01/08/2002, 13h48
  5. Ajouter une aide
    Par Mailgifson dans le forum C++Builder
    Réponses: 5
    Dernier message: 12/06/2002, 13h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo