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 :

Détection de lettres en symboles avec \b [RegExp]


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2019
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Détection de lettres en symboles avec \b
    Bonjour,

    Je suis actuellement en train de travailler sur un script pour détecter une lettre (en caractères latins) délimitée entre deux symbôles (comme :) et la transformer en caractère cyrillique.

    Par exemple :

    Moscou
    :Moskva:

    doit donner :

    Moscou
    Москва

    Voici le script en question :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <textarea id="entry" rows="10" cols="60"></textarea>
     
    <button onclick="do_tests()">Go !</button>
     
    <script type="text/javascript">
    function do_tests() {
        var entry = document.getElementById('entry');
     
        var str = entry.value;
     
        str = str.replace(/\b:d:/g, "д"); // Exemples de lettres
        str = str.replace(/\b:p:/g, "п");
     
        entry.value = str;
    }
    </script>

    Je sais que le symbôle \b consiste à détecter une expression en début et fin de mot.

    Je me suis renseigné entre temps sur le site de W3Schools.

    Seulement, il n'y a aucune modification de texte dès que j'appuie sur le bouton "Go !"

    J'ai essayé pendant plus de 20 minutes.

    Est-ce normal ?

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 910
    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 910
    Points : 6 703
    Points
    6 703
    Par défaut
    Tout d'abord, à propos de W3School: contrairement à ce que son nom laisse penser, il n'y a aucune affiliation entre ce site et le W3C. Personnellement, je ne m'en sert pas comme source d'information, et lui préfère largement, par exemple MDN (Mozilla Development Network) en ce qui concerne le Javascript.

    À propos de \b (word boundary), l'appellation "limite de mot" est trompeuse voire inexacte. \b marque:
    • soit la position dans la chaîne d'un caractère de la classe [A-Za-z0-9_] lorsqu'il est au début de la chaîne ou qu'il est précédé d'un caractère de la classe [^A-Za-z0-9_]
    • soit la position d'un caractère de la classe [^A-Za-z0-9_] lorsqu'il est précédé par un caractère de la classe [A-Za-z0-9_]
    • soit la position de la fin de la chaîne si elle est précédée par un caractère de la classe [A-Za-z0-9_]


    Ce qui ne va pas dans ton code, c'est que tu espères en écrivant :d: trouver les lettres d dans les mots encadrés par des :. C'est un peu de la pensée magique! Si la sous-chaîne :d: n'existe pas dans la chaîne source, il n'y a aucune raison que tu la trouves.

    Pour pouvoir cibler tes remplacements sur les mots encadrés par : tu dois d'abord chercher ces mots pour ensuite effectuer les remplacements uniquement sur ceux-ci. Pour faire ça, tu peux utiliser String.prototype.replace avec comme premier paramètre la pattern pour trouver ces mots et en deuxième paramètre une fonction dans laquelle tu feras les changements de lettre:
    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    str = str.replace(/:([A-Z]+):/gi, function (_, g1) {
        return g1.replace(/d/g, 'д')
                 .replace(/p/g, 'п');
    });

    NB: Si tu dois remplacer un groupe de lettres latines par une seule lettre cyrillique, ce genre de remplacements doit être effectué en premier.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2019
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Effectivement, la documentation de MDN est plus complète.

    En tout cas, cette solution me convient parfaitement et me servira beaucoup par la suite.

    Merci beaucoup en tout cas !

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 28/08/2007, 15h32
  2. Réponses: 3
    Dernier message: 27/01/2007, 17h53
  3. Erreur chargement de symbole avec Axis
    Par badr16 dans le forum C++
    Réponses: 4
    Dernier message: 14/06/2006, 16h55
  4. Réponses: 4
    Dernier message: 23/04/2004, 16h06

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