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 :

Mode multiline et option ungreedy ?


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut Mode multiline et option ungreedy ?
    Bonjour,

    Après une bonne prise de tête pour récupérer le texte (sur plusieurs lignes) contenu
    dans une balise div, je me suis aperçu que le mode multiline ne fonctionnait pas
    toujours notamment sous FF. Donc exit l'option m.

    Suite à des recherches j'ai trouvé un code qui contourne le problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var div_content = /<div class="maclasse">([^þ]*)<\/div>/i;
    Le truc consiste à cibler tous les caractères exceptés ceux qui n'ont, à priori, aucune chance d'apparaitre
    dans la chaine. ici en l'occurence: þ

    Voici mon code:

    Texte à matcher:
    <div class="maclasse">
    contenu du div maclasse
    </div>

    <div class="uneclasse">
    contenu du div uneclasse
    </div>
    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var div_content = /<div class="maclasse">([^þ]*)<\/div>/i;
    		  var result = data.match(div_content);
    		  alert (result[1]);
    Ce qui m'affiche le résultat suivant:
    contenu du div maclasse
    </div>

    <div class="uneclasse">
    contenu du div uneclasse
    c'est presque bon sauf qu'au lieu de s'arrêter au 1er </div> après <div class="maclasse">, il
    continue jusqu'au bout.

    Y a t-il une équivalence de ungreedy (U) comme en PHP ?
    Je sais qu'il y a l'option g, mais que je la mette ou pas le résultat est le même.

    Quelqu'un pourrait-il maider ?

    Merci

  2. #2
    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
    Curieusement hormis le fait que IE sorte le tag div en majuscules il semblerait que les quotes dans les tags posent aussi problèmes
    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
    <script >
    function bar(){
    chaine=document.getElementById('foo').innerHTML.replace(/\r|\n/,'')
    reg=new RegExp("<div class=\W*maclasse\W*>([^<]*)<\/div>",'gim')
    reg.exec(chaine)
    alert(RegExp.$1)
    }
    </script >
    </head>
     
    <body onload="bar()">
    <div id="foo">
    <div class="maclasse">
    contenu du div maclasse
    </div>
     
    <div class="uneclasse">
    contenu du div uneclasse
    </div> 
    </div>
    </body>
    P.S le replace \r\n est inutile ça fonctionne tout aussi bien sans le modifier m est actif
    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 !

  3. #3
    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
    ha oui et entre FFX qui reconnait " mais pas \W et IE inversement

    Voici une bidouille qui fonctionne pour les deux:

    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
    <script >
    function bar(){
    chaine=document.getElementById('foo').innerHTML
    reg=new RegExp("<div class=(\"|\W*)maclasse\\1>([^<]*)</div>",'gim')
    result=reg.exec(chaine)
    alert(result[2])
    }
    </script >
    </head>
     
    <body onload="bar()">
    <div id="foo">
    <div class="maclasse">
    contenu du div maclasse
    </div>
     
    <div class="uneclasse">
    contenu du div uneclasse
    </div> 
    </div>
    </body>

    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reg=/<div class=("|\W*)maclasse\1>([^<]*)<\/div>/gim

    .
    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 !

  4. #4
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    Salut et merci pour ta réponse.

    La regex fonctionne bien, mais je me demande si le <\/div> à la fin
    est vraiment utile car :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg = /<div class=("|\W*)media\1>([^<]*)/gim;
    fonctionne également puisque [^<] arrête le match au 1er chevron.

    Cependant, ça ne marche qu'avec du texte. Je ne l'ai pas précisé
    mais il y a également des balises à l'intérieur du div, ce qui
    fait que la regex ne fonctionne plus avec par ex:
    contenu du div <b>maclasse</b>
    le résultat s'arrête à "div".

    J'imagine que le truc serait d'exclure la chaîne </div mais je n'y
    arrive pas. J'ai essayé avec le test avant positif et négatif mais
    je ne m'en sort pas.

    Quelle serait la bonne syntaxe ?

  5. #5
    Membre éclairé Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par défaut
    Toujours avec mon problème.
    pour le résoudre il faudrait exclure le caractère "<" seulement s'il est
    suivit de "/div>"
    Avec un test avant positif ça donnerait:
    mais comment concaténer les 2 expressions ??????
    J'ai essayé dans tous les sens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var reg = /<div class=("|\W*)media\1>([^<](?=\/div>)*)/gim;
    var reg = /<div class=("|\W*)media\1>([^<(?=\/div>)]*)/gim;
    var reg = /<div class=("|\W*)media\1>([^<]+(?=\/div>)*)/gim;
    et j'en passe et des meilleurs, mais aucune ne marche.

    Heeelp!

  6. #6
    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
    tu oublies le < ouvrant ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg = /<div class=("|\W*)media\1>([^<]+<(?=\/div>)*)/gim;
    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 !

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

Discussions similaires

  1. Le grand mode d'emploi du forum, à lire si vous souhaitez tout savoir !
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 03/06/2013, 17h36
  2. [C#] question sur l'option multiline de l'objet Textbox
    Par prez dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/10/2006, 16h52
  3. Réponses: 17
    Dernier message: 17/10/2002, 20h06
  4. Passer en mode 800*600
    Par flavien tetart dans le forum Assembleur
    Réponses: 8
    Dernier message: 30/05/2002, 23h05
  5. Vous gerez comment les options d'un programme?
    Par n0n0 dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/05/2002, 13h21

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