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 :

Traitement d'une URL récalcitrante [RegExp]


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 680
    Points
    680
    Par défaut Traitement d'une URL récalcitrante
    Bien le bonjour amis codeurs.

    Je viens vers vous aujourd'hui avec un souci de Regex (Oui, encore...), en effet je cherche à manipuler des URL en Js grâce à des regex, le hic, c'est que l'une d'entre elle ne fonctionne pas.

    Ou plutot, je ne parviens pas au résultat souhaité.

    Voici donc un exemple d'URL que j'ai:

    http://sousdomaine.domaine.tld/pages/foo.php

    Ici, je cherche, grâce à ma regex à ne récupérer que le foo de l'URL.
    Alors, j'arrive à le faire, mais en deux étapes, alors que je pense que c'est faisable en une seul vue que sous PHP je le fait déjà [lol]

    Voici comment je procède:

    1°/- J'analyse la dite URL, puis, je lui applique une premiere regex de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regex = "[A-Za-z]+.php"
    Ce qui donne comme résultat la sortie suivante:

    2°/- J'analyse le premier résultat avec une nouvelle regex de ce type:

    Ce qui donne comme résultat la sortie suivante:

    Comme vous pouvez le voir, c'est pas le top niveau optimisation des ressources [lol] surtout que c'est du Js et donc, ça pompe chez l'utilisateur final.

    Donc, ce que je souhaiterais c'est avoir ce résultat en une seul regex.
    Voici ce que j'avais pensé utiliser, mais, qui, apparemment, n'est pas bon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regex = "[a-zA-Z]+[^(.php)]"
    Bref, si une âme charitable voulait bien m'aiguiller je lui en serait gré [lol]
    J'avoue que les Regex, j'ai beau en faire, j'arrive pas à tout assimiler.

  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 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 634
    Points : 66 650
    Points
    66 650
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var monurl="http://sousdomaine.domaine.tld/pages/foo.php"
    alert(monurl.match(/\/([a-z]+)\.php$/)[1])
    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
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 680
    Points
    680
    Par défaut
    IMPECCABLE!!

    Merci bien, et oui, ok, maintenant je vois comment ça fonctionne.
    En fait, j'avais pas capté que le return de match était un tableau.

    Donc, ok, ce n'était pas trop loin de ce que j'avais pensé, ça vas finir par rentrer ces regex. Merci encore.


    EDIT:

    Non en fait, ça ne fonctionne pas totalement... je ne sais pas pourquoi d'ailleurs

    Donc, voici mon code Javascript:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // BaseURI Parsing //
    	var PageURI = document.getElementById(id);
    	var PageURL = PageURI.baseURI;
    	console.log(PageURL); <--- ça OK, ça donne http://www.domaine.tld/pages/foo.php
    	var PagePattern = "/\/([a-z]+)\.php$/";
    	var PageRegexp = new RegExp(PagePattern,"gi");
    	var PageParsed = PageURL.match(PageRegexp)[1];
    	console.log(PageParsed);
    Alors donc, si j'utilise le code tel quel, j'ai un beau:

    Object as no method Match for NULL value
    Je viens de m'appercevoir que le navigateur (Chrome et FF) aimé pas du tout les \ d'échappement.

    Si je fait un code fonctionnel tel que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // BaseURI Parsing //
    	var PageURI = document.getElementById(id);
    	var PageURL = PageURI.baseURI;
    	console.log(PageURL); <--- ça OK, ça donne http://www.domaine.tld/pages/foo.php
    	var PagePattern = "/([a-z]+).php$";
    	var PageRegexp = new RegExp(PagePattern,"gi");
    	var PageParsed = PageURL.match(PageRegexp)[1];
    	console.log(PageParsed);
    cela me donne pour [1]:

    Undefined --> en fait, y'a pas d'entrée 1 apparemment.

    et cela me donne pour [0]:

    http://www.domaine.tld/pages/foo.php

    Donc, en gros, je me demande si j'ai pas oublié quelque chose là.
    C'est surement ça d'ailleurs, mais je vois pas...


    EDIT2:

    Bien, j'ai enfin fini par m'en dépétrer

    DONC, le soucis est le suivant:

    Javascript accepte deux forme de Regex, la premiere façon de faire est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var url = http://www.domaine.tld/pages/foo.php;
    var regex = /\/([a-z]+).php$/;
    tandis que la seconde est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var url = http://www.domaine.tld/pages/foo.php;
    var regexPattern = "/([a-z]+).php$";
    var regex = new RegExp ("motif","drapeau");
    Or, avec la deuxième façon de faire, si, comme dans mon exemple on précise le drapeau dans le pattern ET dans le regex, et bien ça ne fonctionne pas.

    Apparemment, et je dit bien APPAREMMENT, le moteur d'analyse Js n'est pas capable de choisir lequel des deux drapeaux il doit utiliser.

    Ce soucis vaux pour toutes les valeurs de drapeau et associations de valeurs disponibles.

    Que ce soit: g ou i ou s ou m ou gi ou sm ou gis ou gim ou gism

    Donc, si quelqu'un sait me dire si ce raisonnement est juste, ou peut me corriger, je suis curieux de connaitre la vrai réponse.

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

Discussions similaires

  1. [ Struts ] recuperer une valeur dans une url?
    Par njac dans le forum Struts 1
    Réponses: 2
    Dernier message: 02/06/2004, 15h24
  2. [net] recuperer les proprietes d'un File via une URL
    Par mma dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 06/05/2004, 13h45
  3. [Debutant]Formater un string pour une url
    Par maxxou dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 22/03/2004, 17h17
  4. [JSP] encoder et décoder les param d'une URL ?
    Par iubito dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 22/12/2003, 12h34
  5. [web] tester la validiter d'une URL
    Par zebiloute dans le forum Web
    Réponses: 4
    Dernier message: 25/11/2002, 17h51

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