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 :

remettre l'opérateur caché multiplier [RegExp]


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut remettre l'opérateur caché multiplier
    Bonjour, j'essaie de faire étape par étape pour faire réapparaitre le signe * d'une expression.
    l'expression littérale est assez basique : que des entiers relatifs, pas de notations scientifique
    pas de vérification syntaxique du langage, les variables sont a,b,c,...,z et 𝝅 (mais pas ab), on écrit 2a mais pas a2.En gros les maths de niveau de 3ième/2nd

    Je veux transformer une écriture littérale du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str='(a+b)²-12abc+13(a+ba+(c+d)²)-c²b(u+v)+41𝝅²+10²+(a+b)(c+d)';
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat='(a+b)**2-12*a*b*c+13*(a+b*a+(c+d)**2)-c**2*b*(u+v)+41*𝝅**2+10**2+(a+b)*(c+d)';
    (faire apparaitre le signe multiplier, c'est un exemple où j'ai tout mis)
    Je débute dans l'expression régulière, j'ai lu le cours proposé sur ce site https://javascript.developpez.com/tu.../cours-regexp/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    const str='(a+b)²-12abc+13(a+ba+(c+d)²)-c²b(u+v)+41𝝅²+10²+(a+b)(c+d)';
    match1=/([0-9]+|𝝅)([a-z𝝅(]+)/g
    result=str.replaceAll("²","**2");
    result=result.replace(match1,"$1*$2");
    match2=/([a-z\)]{1})([a-z𝝅\(]{1})/g
    result=result.replace(match2,"$1*$2");
    result=result.replace(match2,"$1*$2");
    console.log(result);
    Je fais deux passages pour 12abc, avez vous par hasard mieux ?
    Merci d'avance pour vos éclairages.

  2. #2
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    Pour faire (expression1)(expression2) par (expression1)*(expression2) c'est pas bien compliqué tant qu'il n'y a pas de parenthèses imbriquées : str.replaceAll(/(\([^)]+\))(\([^)]+\))/g, "$1*$2");.

    Dès lors qu'il y a des parenthèses imbriquées, j'ai bien peur que ce ne soit pas encore possible facilement en JS car le moteur d'expression régulière de JS ne propose pas de fonctionnalités "avancées".
    Du coup pour éviter de tomber dans ces cas-là, il est préférable de les filtrer en interdisant les parenthèses ouvrantes dans des parenthèses : str.replaceAll(/(\([^()]+\))(\([^()]+\))/g, "$1*$2");.

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    Merci de participer mon poste, j'ai réédité car j'ai avancé un peu, oui il n'y a pas de parenthèse imbriquée.

  4. #4
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    Un site très utile pour tester les expressions régulières : https://regex101.com/

    Il faut choisir "ECMAScript" dans la liste de gauche pour tester avec le moteur de Javascript

  5. #5
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Salut,

    Une solution avec assertion vers l'avant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const str="(a+b)²-12abc+13(a+ba+(c+d)²)-c²b(u+v)+41𝝅²+10²+(a+b)(c+d)";
    console.log(str.replace(/²/g,"**2").replace(/([\w)])(?=[a-z𝝅(])/g,"$1*"));

  6. #6
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2017
    Messages : 105
    Points : 53
    Points
    53
    Par défaut
    Trop bien cette dernière proposition.
    Merci

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

Discussions similaires

  1. Répertoire caché
    Par KUBITUS dans le forum Delphi
    Réponses: 30
    Dernier message: 13/04/2007, 07h19
  2. Qu'est ce que le cache ?
    Par irrou dans le forum Assembleur
    Réponses: 4
    Dernier message: 24/11/2002, 23h28
  3. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22
  4. Ouvrir (fopen) un fichier caché
    Par shef dans le forum C
    Réponses: 2
    Dernier message: 09/09/2002, 09h06
  5. Webbrowser : Comment ne pas prendre la page en cache
    Par cedm78 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 30/08/2002, 11h17

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