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 :

Expression regulière en mode constructeur


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 186
    Points : 114
    Points
    114
    Par défaut Expression regulière en mode constructeur
    bonjour
    Soit en mode littéral cette expression régulière (pour tester l'entrée d'une adresse courriel)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg01=/^[a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,6}$/i;
    Quelle est la syntaxe correcte en utilisant la méthode constructeur ?

    reg01= new RegExp(.....)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    tu ne sais pas faire une simple recherche ??


  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Bonjour,
    pour passer en syntaxe « constructeur » il y a 3 étapes :
    1. retirer les délimiteurs /.../ ;
    2. échapper les antislashes \\\ ;
    3. passer les flags en second paramètre.

    Mais je ne comprends pas pourquoi tu veux utiliser cette syntaxe qui est, à mon avis, moins pratique. On a la chance d’avoir des littéraux RegExp en JavaScript, ce n’est pas le cas par exemple en PHP.

    Avec la syntaxe constructeur, on doit passer par un littéral chaîne, ce qui ajoute un niveau d’interprétation : d’abord l’interprétation du littéral chaîne par le moteur JS, où les séquences d’échappement sont transformées une première fois (par exemple "\n" devient un retour à la ligne, et "\\" devient "\"), puis cette forme transformée est passée au moteur de RegExp qui a ses propres séquences spéciales, dont les plus connues sont \d, \w ou encore \b.
    Quand on utilise la syntaxe constructeur, c’est facile de se tromper lors de l’écriture et de ne pas voir les erreurs à la relecture, à cause de ces séquences d’échappement qui se téléscopent et qui peuvent donner des résultats complètement différents de ce qu’on attend, sans qu’on comprenne pourquoi.

    Utilise les littéraux RegExp, c’est mon conseil
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 186
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Bonjour,
    pour passer en syntaxe « constructeur » il y a 3 étapes :
    1. retirer les délimiteurs /.../ ;
    2. échapper les antislashes \\\ ;
    3. passer les flags en second paramètre.
    Merci.
    Donc pour passer en syntaxe constructeur , devant chaque antislash (du mode littéral) il faut automatiquement rajouter un autre antislash ?

    Est-ce que la chaine (ainsi que le flag du second paramètre) doivent être entre guillemets( " ") et non pas entre apostrophes (' ') .

    ce qui donnerait pour mon exemple d'expression régulière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //mode littéral
    var reg01=/^[a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,6}$/i;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //  mode constructeur
    var model="^[a-z0-9._-]+@[a-z0-9._-]+\\.[a-z]{2,6}$";
    reg01= new RegExp(model,"i");
    Le mode constructeur est la véritable syntaxe d'origine de javascript, le mode littéral provient du Perl.

  5. #5
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Citation Envoyé par goofyto8 Voir le message
    Est-ce que la chaine (ainsi que le flag du second paramètre) doivent être entre guillemets( " ") et non pas entre apostrophes (' ') .
    Fonctionnellement, JS ne fait pas de différence entre les chaînes " " et ' '. Choisis l’une ou l’autre en fonction de la situation, par exemple :
    • si la chaîne contient des ', c’est plus pratique de délimiter avec " ", et inversement ;
    • si tu es sur un projet de groupe, il peut y avoir une convention de style à respecter ;
    • etc.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //  mode constructeur
    var model="^[a-z0-9._-]+@[a-z0-9._-]+\\.[a-z]{2,6}$";
    reg01= new RegExp(model,"i");
    Oui c’est bien ça (j’ai vérifié avec la console).

    Citation Envoyé par goofyto8 Voir le message
    Le mode constructeur est la véritable syntaxe d'origine de javascript, le mode littéral provient du Perl.
    C’est vrai, et le moteur de RegExp (dans tout langage qui en possède un) est une variante simplifiée de Perl. Mais je suis à peu près sûr que les littéraux RegExp faisaient partie de JavaScript dès la première version du langage.
    Et puis, c’est compliqué d’invoquer les « origines » de JavaScript comme argument solide, quand on sait le début un peu précipité que le langage a connu. En particulier, Brendan Eich avait prévu à la base de faire un modèle objet purement basé sur les prototypes, comme le langage Self, mais Netscape lui a demandé d’y ajouter l’opérateur new pour que ça ressemble à Java.
    Inévitablement, il y a eu un débat autour de l’utilisation de new en JS, long mais intéressant, je t’invite à le lire si tu as le temps : L’opérateur new, bonne ou mauvaise pratique ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 186
    Points : 114
    Points
    114
    Par défaut
    Merci pour toutes ces informations car effectivement les exemples donnés dans les tutoriels javascript, au sujet des expressions régulières, privilégient le mode littéral et indiquent aussi le mode constructeur ..... mais avec des exemples de chaines très simples et très rarement lorsque le modèle commence à devenir complexe et demande beaucoup d'attention.

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

Discussions similaires

  1. Recherche recursive à l'aide des expressions reguliére
    Par titoff dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/12/2005, 16h42
  2. [RegEx] aide pour une expression regulière
    Par hugo123 dans le forum Langage
    Réponses: 5
    Dernier message: 24/11/2005, 15h41
  3. ET dans une expression regulière
    Par kesako dans le forum Langage
    Réponses: 4
    Dernier message: 10/11/2005, 12h57
  4. Problème expression regulière ??
    Par panaone dans le forum Langage
    Réponses: 5
    Dernier message: 18/08/2005, 13h41
  5. Variables et Expression Regulière
    Par Temari dans le forum Langage
    Réponses: 5
    Dernier message: 05/08/2005, 01h55

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