C'est un problème sur freeCodecamp sur lequel je suis bloqué depuis des jours maintenant. L'expression régulière doit retourner true pour les nombres qui ne se répètent que 3 fois dans une chaîne. Cela étant dit, les nombres doivent être séparés par 2 espaces. Voici une solution que j'ai trouvée qui devrait retourner false à mystring
let myString = '42 42 42 42' let myRegex = /(\d\d+)(\s)\1\2\1/ let result = myRegex.test(myString) //True
C'est la solution que j'ai obtenue de get get a hint mais même cela ne fonctionne pas. Il réussit tous les tests sauf 1. Il est censé renvoyer false car le nombre dans la chaîne se répète 4 fois et non 3
4 Réponses :
Vous devez vous assurer que la partie correspondante n'est pas suivie du nombre, ce qui peut être fait avec une anticipation négative pour la référence arrière, ou en ancrant la fin du motif à la fin de la chaîne. Mais il y a un autre problème - si le moteur d'expression régulière démarre au début du deuxième numéro, par exemple:
^(\d+)(?: \1){2}$
Alors le modèle passera, alors qu'il ne devrait pas. Veillez donc également à ancrer le motif au début.
42 42 42 42 ^
J'ai réussi le test sur freeCodecamp en utilisant ce
/^(\d+)\s\1\s\1$/
En utilisant les balises start ^ et end $ , vous pouvez arrêter le calcul de réutilisation après un certain nombre de réutilisation comme ceci:
/^(\d+)(\s)\1\2\1$/
D'après l'objectif de la leçon:
Utilisez des groupes de capture dans reRegex pour faire correspondre les nombres qui se répètent uniquement trois fois dans une chaîne, chacune séparée par un espace.
Si je comprends bien, l'objectif est de faire correspondre les mêmes nombres séparés par un espace qui ne se répètent que trois fois n'importe où dans une chaîne. Je suppose que cela signifie que le groupe des numéros correspondants pourrait être précédé de tout sauf du même nombre et de l'espace, et suivi de tout sauf de l'espace et du même nombre.
Donc, la correspondance pour la chaîne
42 42 42 42
serait faux, mais correspondrait à la chaîne
23 42 42 42 34
devrait être vrai.
La chaîne peut-elle contenir d'autres nombres? Par exemple,
1 2 2 2, qui serait une correspondance, ou n'est-ce pas possible?Cela ne devrait pas être un match. Au fait, tous les chiffres devraient être les mêmes. par exemple)
'1 1 1'est vrai mais'1 2 2'est faux.Le numéro ne doit se répéter que 3 fois. Pas plus. Et rien de moins.