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 :

Variable JS dans regex


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut Variable JS dans regex
    Bonjour à tous,

    Ce dimanche pluvieux je suis dans la panade, je cherche à faire une ReGex avec une variable dedans, j'ai donc écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var longMiniMot = parseInt(editabiliteTA.split('-')[0]);	//	editabiliteTA = "4-3"
    var  regex = new RegExp("[0-9a-zA-ZéèôùûàçÉÈÔÙÛÀÇ]{"+longMiniMot+", 36}","g");
    if($(this).html().toString().split(regex).length > editabiliteTA.split("-")[1]) {
    Do something…
    }
    Ceci ne fonctionne pas.

    Mais cette Regex fonctionne parfaitement quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var  regex = new RegExp("[0-9a-zA-ZéèôùûàçÉÈÔÙÛÀÇ]{4, 36}","g");
    Mais l'insertion de la var JS bloque tout, Pourquoi ??

    D'avance merci pour vos remarques éclairées !!

    Cdlt

  2. #2
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    C'est pas l'insertion de la variable JS qui pose problème, c'est l'espace entre la virgule et 36 dans l'expression.
    Remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var  regex = new RegExp("[0-9a-zA-ZéèôùûàçÉÈÔÙÛÀÇ]{"+longMiniMot+", 36}","g");
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var  regex = new RegExp("[0-9a-zA-ZéèôùûàçÉÈÔÙÛÀÇ]{"+longMiniMot+",36}","g");
    (cf la spécification ES grammaire des regex)

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 900
    Points : 6 678
    Points
    6 678
    Par défaut
    Je pense que lysandro a mis le doigt sur le problème, cette espace n'a rien à faire ici.

    Une petite remarque concernant ta classe de caractères. C'est assez fastidieux de trouver toutes les lettres non-ASCII utilisées en français (en particulier, à cause des noms propres qui peuvent contenir pas mal de bizarreries comme, par exemple, des ÿ). Tout ça pour dire qu'il en manque pas mal dans ta classe, et que pour t'éviter d'écrire une classe de quinze kilomètres tu peux utiliser le modificateur i (qui fonctionne également pour les caractères accentués), si, bien sûr, la casse n'est pas importante pour la partie que tu insères.

    Citation Envoyé par bronon Voir le message
    Ce dimanche pluvieux je suis dans la panade
    Petite précision: aujourd'hui nous sommes déjà lundi.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut
    Citation Envoyé par lysandro Voir le message
    C'est pas l'insertion de la variable JS qui pose problème, c'est l'espace entre la virgule et 36 dans l'expression.
    Remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var  regex = new RegExp("[0-9a-zA-ZéèôùûàçÉÈÔÙÛÀÇ]{"+longMiniMot+", 36}","g");
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var  regex = new RegExp("[0-9a-zA-ZéèôùûàçÉÈÔÙÛÀÇ]{"+longMiniMot+",36}","g");
    (cf la spécification ES grammaire des regex)
    C'est un vrai bonheur que de s'adresser à un vrai pro. Merci tout re-fonctionne correctement.

    Bonne soirée.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Je pense que lysandro a mis le doigt sur le problème, cette espace n'a rien à faire ici.

    Une petite remarque concernant ta classe de caractères. C'est assez fastidieux de trouver toutes les lettres non-ASCII utilisées en français (en particulier, à cause des noms propres qui peuvent contenir pas mal de bizarreries comme, par exemple, des ÿ). Tout ça pour dire qu'il en manque pas mal dans ta classe, et que pour t'éviter d'écrire une classe de quinze kilomètres tu peux utiliser le modificateur i (qui fonctionne également pour les caractères accentués), si, bien sûr, la casse n'est pas importante pour la partie que tu insères.



    Petite précision: aujourd'hui nous sommes déjà lundi.
    Certains jours c'est plus compliqué que d'autres !!!

    Merci pour ta réponse, effectivement j'ai fait court pour la classe de caractères, je viens de regarder rapidement sur Google, je n'ai rien vu de pertinent concernant ce modificateur «i» qui est supposé faire quoi ?

    Bonne soirée.

    [MàJ] Oups je viens de comprendre ta remarque effectivement dans ce cas bien précis la cassent n'a aucune importance, maintenant je me limite au caractères ASCIII stricto sensus. Existe-t-il une classe pour tous ces caractères non-ascii ou même les lettres grecques (∆,∂,ß,∫,∑, …) souvent utilisées dans les textes techniques ce qui peut arriver dans ce cas précis ?
    Bonne journée

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Tu as aussi un léger problème de logique dans ton code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var longMiniMot = parseInt(editabiliteTA.split('-')[0]);
    A quoi te sert de transformer en entier (parseInt()) pour l'utiliser en tant que chaine ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $(this).html().toString()
    La méthode .html() renvoie une chaine, donc l'utilité de toString() derrière est pas vraiment évidente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    editabiliteTA.split("-")[1]
    Là c'est le contraire de la première remarque... Maintenant, tu veux utiliser l'entier pour la comparaison mais tu le laisses en chaine.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Points : 187
    Points
    187
    Par défaut
    Effectivement bovino mais tout ceci viens de mon pataugeage initial.
    J'ai remis de l'ordre dans la syntaxe.
    Merci pour tes remarques de bon sens.
    Bonne journée

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

Discussions similaires

  1. [PowerShell] Inclure une variable Powershell dans une regex
    Par arnaudperfect dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 15/04/2015, 12h33
  2. Réponses: 5
    Dernier message: 31/03/2014, 18h05
  3. variables dans regex
    Par TabrisLeFol dans le forum Langage
    Réponses: 2
    Dernier message: 31/03/2007, 20h32
  4. Comment renseigner la variable autocommit dans my.ini
    Par Charroin dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 18/09/2003, 15h23
  5. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/06/2003, 19h22

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