comment gérer les caractères dupliqués dans regex
J'utilise cette expression régulière pour trouver TOUTES les occurrences suivantes dans un tableau :
/^.*(?=.*T)(?=.*O)(?=.*T)(?=.*A).*$/
ça correspond
pOTATO
mATTO
cATeTO
mais aussi
lATO
minAreTO
AnTicO
bien que ces trois derniers mots n'aient qu'un T
comment puis-je extraire uniquement des mots contenant au moins deux T, un A et un O, dans n'importe quel ordre ?
Étant donné que les lookarounds tiennent bon , une fois que le premier lookaround est essayé, le suivant et tous les suivants après le premier lookaround sont vérifiés exactement à partir de la même position.
Vous devez utiliser
/^(?=.*T.*T)(?=.*O)(?=.*A).*/
/^(?=.*T[^T]*T)(?=.*O)(?=.*A).*/
Notez le manquant .*
après ^
, ce n'est pas nécessaire car il suffit de ne déclencher les anticipations qu'une seule fois à la position de départ de la chaîne. Maintenant, (?=.*T.*T)
assurez-vous qu'il y a deux répétitions de zéro ou plusieurs caractères autres que les caractères de saut de ligne autant que possible suivis d'un caractère T
. (?=.*T[^T]*T)
s'assure qu'il y a zéro ou plusieurs caractères autres que les caractères de saut de ligne autant que possible, puis T
zéro ou plusieurs caractères autres que T
et puis un autre T
.
Voir démo regex #1 et démo regex #2 . Notez que cela (?=.*T[^T]*T)
peut correspondre à plus que (?=.*T.*T)
car [^T]
peut correspondre à des caractères de saut de ligne. Pour éviter cela dans la démo, j'ai ajouté \n
dans la classe de caractères négative.