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 :

[DOM] RegEx - Suppression d'attributs dans une balise


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 20
    Par défaut [DOM] RegEx - Suppression d'attributs dans une balise
    Salut,


    Je suis en train de lutter pour supprimer des attributs de certaines balises en utilisant les expressions régulières.
    J'aimerais garder seulement les attributs tilte et href d'une balise <a>.
    Ex :
    <a href="http://monsite.com" onclick="..." onmouseover="..." title="le titre">lien</a>

    devient :
    <a href="http://monsite.com" title="le titre">lien</a>

    Et ce quelque soit les attributs présent ainsi que leur place dans la balise.

    Je pense que cela est possible avec les expressions régulières mais je n'y arrive pas


    Merci d'avance.

    JumBay

  2. #2
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    voici une solution :
    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
     
     var chaine = '<a onmousedown="" href="http://monsite.com" onclick="..." onmouseover="..." title="le titre">lien</a>;';
     var lien, titre, msg, pos1, pos2;
     
     var exp_href = /(href=\"[a-z0-9.\/:-_]+\")/gi;
     var exp_Title = /(title=\"[a-z0-9.\/:-_\s]+\")/gi;
     
     var sortie;
     
     lien = chaine.match(exp_href);  //extraction du href
     titre = chaine.match(exp_Title);  //extration de title
     
     pos1 = chaine.indexOf(">");    // position de >
     pos2 = chaine.indexOf("<", pos1);   // position de < qui vient apres le >
     msg = chaine.substring(pos1+1, pos2);  // extraction du message
     
    //reconstitution du lien 
     sortie = "<a "+lien+" "+titre+">"+msg+"</a>";
     
     
     alert(lien+"\n"+titre+"\n"+msg+"\nRésultat=\n"+sortie);
    remarque : il faut que le contenu de href et de title soient encadrés par des " "

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 20
    Par défaut
    Merci pour ta solution mais j'ai oublié de préciser que j'aimerais faire ceci dans un texte contenant différentes balises dont des balises <a> et celles-ci peuvent être présente plusieurs fois.

    Sinon dans ce que tu m'as donnée pour extraire le title ou le href on peut faire comme ceci aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var exp_href = /(href="[^"]+")/gi;
    on gagne 3 charactères

    J'ai pensé à entouré les href et les title avec des [] pour les récupérer plus facilement par la suite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a onmousedown="" href="http://monsite.com" onclick="..." onmouseover="..." title="le titre">lien</a>
    devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a onmousedown="" [href="http://monsite.com"] onclick="..." onmouseover="..." [title="le titre"]>lien</a>
    ... mais je n'y arrives pas :s

  4. #4
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    match retourne un tableau :

    Code x : 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
    var chaine = "";
    chaine  = '<a onmousedown="" href="http://monsite1.com" onclick="..." onmouseover="..." title="le titre 1">lien 1</a>;';
    chaine += '<p>bla bla bla';
    chaine += '<a href="http://monsite2.com" title="le titre 2">lien 2</a>;';
    chaine += 'bla bla <span> bla bla bla</span> bla';
    chaine += '<a onmouseover="..."  href="http://monsite3.com" onclick="..." title="le titre 3">lien 3</a>;';
    chaine += '</p>';
    
    
     var lien, titre, msg, n;
     var sortie;
    
     var exp_href = /(href="[^"]+")/gi;
     var exp_Title = /(title="[^"]+")/gi;
     var exp_msg = /(>[^<]+<\/a>)/gi;
    
    
     lien = chaine.match(exp_href);  //extraction du href
     titre = chaine.match(exp_Title);  //extraction de title
     msg = chaine.match(exp_msg);  //extraction du message
    
     n = lien.length;
    
     sortie = "";
     for (i=0; i<n; i++)
     {
        sortie += "<a "+lien[i]+" "+titre[i] + msg[i]+"\n";
     }
    
     alert(sortie);


    J'ai ajouté des balises p et span dans la chaine pour le test
    Néanmoins, il faut supposer que toutes les balises <a> ont les attributs href et title (sinon les tableaux title, href et msg n'auront pas la même taille).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 20
    Par défaut
    C'est bon j'ai trouvé la solution.

    Bon c'est peut être pas ce qui a de plus beau mais ça marche :

    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
     
    var text = '<a title="titre seul" ><a href="lien seul" ><a title="[titre] et lien"  href="titre et [lien]"  ><a  href="[lien] et titre" title="lien et [titre]" ><a onmousedown="" href="http://monsite1.com" onclick="..." onmouseover="..." title="le titre 1">lien 1</a>';
     
    text.replace(/<a[^th>]*(href=".*?"|title=".*?"|)*[^th>]*(href=".*?"|title=".*?")*[^>]*>/gi, '<a $1 $2>');
     
    // affiche : 
    // <a title="titre seul" ><a href="lien seul" ><a title="[titre] et lien" href="titre et [lien]"><a href="[lien] et titre" title="lien et [titre]"><a href="http://monsite1.com" title="le titre 1">lien 1</a>
     
     
    // Et avec d'autres balises ça marche aussi :
     
    var chaine = "";
    chaine  = '<a onmousedown="" href="http://monsite1.com" onclick="..." onmouseover="..." title="le titre 1">lien 1</a>;';
    chaine += '<p>bla bla bla</p>';
    chaine += '<a href="http://monsite2.com" title="le titre 2">lien 2</a>;';
    chaine += 'bla bla <span> bla bla bla</span> bla';
    chaine += '<a onmouseover="..."  href="http://monsite3.com" onclick="..." title="le titre 3">lien 3</a>;';
    chaine += '</p>';
     
    chaine.replace(/<a[^th>]*(href=".*?"|title=".*?"|)*[^th>]*(href=".*?"|title=".*?")*[^>]*>/gi, '<a $1 $2>');
     
    // affiche :
    // <a href="http://monsite1.com" title="le titre 1">lien 1</a>;<p>bla bla bla</p><a href="http://monsite2.com" title="le titre 2">lien 2</a>;bla bla <span> bla bla bla</span> bla<a href="http://monsite3.com" title="le titre 3">lien 3</a>;</p>

  6. #6
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    que signifie
    dans ton expression régulière ?

    .* signifie "tous les caractères", mais .*? là je ne vois pas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/04/2008, 12h30
  2. Réponses: 4
    Dernier message: 08/04/2008, 18h11
  3. [XSLT] écrire des attribut dans une balise
    Par DrDam dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/04/2008, 13h12
  4. [HTML::Parser] Problème Attributs dans une balise
    Par stansoad0108 dans le forum Modules
    Réponses: 4
    Dernier message: 26/03/2008, 11h49
  5. compter attributs dans une balise
    Par attavus dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/07/2006, 17h22

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