PapyJP a écrit :
je ne cherche pas la performance, qui est sans objet dans mon contexte
La performance n'a rien à voir avec l'objet. Ton expression régulière, ta chaîne de cars, etc. sont des objets puisque tu as des attributs et méthodes associés. On peut coder à l'objet avec des très mauvaises performances et inversement (procédurale avec de bonnes perfs) ou coder à l'objet avec de très bonnes performances et en procédurale avec un code qui rame.
Faire de la POO, c'est une philosophie de développement avancée avec de bonnes pratiques.
PapyJP a écrit :
...
Pour le reste
- je ne cherche pas la performance, qui est sans objet dans mon contexte
- je ne cherche pas une autre solution
simplement je voudrais comprendre pourquoi
let text = '!toto120:abc-DEF:tqp34';
let result = text.match(/^(![a-z][-a-z0-9]+)?(:[a-z][-a-z0-9]+)*$/gi);
me donne
[ '!toto120:abc-DEF:tqp34', 'tqp34']
c'est à dire le premier et le dernier item
et non
[ '!toto120:abc-DEF:tqp34', 'toto120', 'abc-DEF', 'tqp34']
et comment il faut modifier ma RegEx pour obtenir le résultat espéré.
Felipe et moi avons donné des solutions viables. Pourquoi avec ton expression régulière, tu n'obtiens pas le résultat escompté ?
Tu commences ton expression rationnelle
par des assertions de type symbole avec un début et fin (^$). Or, c'est un motif qui se répète. Demain, tu pourrais avoir un motif qui se répète au-delà de 3 fois.
!monsieur:robert:michu:age24:75010:paris
Ensuite, tu ajoutes une option « g » qui signifie recherche globale. Ce qui veut dire que le motif doit être plus précis et qu'il soit générique. Ce qui est quasiment le cas
:hello:toto:tata
!hello42:toto84:tata
Pour finir, tu indiques dans les classes le trait d'union au début sans échapper. Le trait d'union est à placer en dernier et/ou qu'il soit échappé.
Olivier C a écrit :
...
Je n'avais pas vu, mais à la soumission le forum Alsacreations tente de convertir certains caractères en émoticons à priori... J'avais oublié ce phénomène. Dans le code posté il n'y avait ni espaces, ni "decu".
...
ton code est décevant
https://www.youtube.com/watch?v=9cujwEBLv5M
Olivier C a écrit :
...
Edit: pas mieux
, mais sur Regex101 ont a bien la regex que je voulais publier ici.
Tu n'as pas besoin d'utiliser l'option « g », puisque tu rédiges l'expression du début jusqu'à la fin. Pour chipoter, je pense que côté perf, ça doit jouer un petit rôle. Je te l'accorde, ça doit être en millisecondes ou microsecondes.
Modifié par Niuxe (08 Sep 2025 - 12:38)