Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2012, 13h30   #1
Membre expérimenté
 
Avatar de ArKam
 
Inscription : mars 2007
Messages : 506
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : mars 2007
Messages : 506
Points : 512
Points : 512
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 :
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 :
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.
ArKam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 13h47   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 076
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

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

Informations forums :
Inscription : mars 2002
Messages : 30 076
Points : 45 211
Points : 45 211
Code :
1
2
var monurl="http://sousdomaine.domaine.tld/pages/foo.php"
alert(monurl.match(/\/([a-z]+)\.php$/)[1])
__________________
Ma page 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


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 16/01/2012, 14h01   #3
Membre expérimenté
 
Avatar de ArKam
 
Inscription : mars 2007
Messages : 506
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : mars 2007
Messages : 506
Points : 512
Points : 512
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 :
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:

Citation:
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 :
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 :
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 :
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.
ArKam est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h13.


 
 
 
 
Partenaires

Hébergement Web