Colonne de gauche - en vert : dix chaînes de dix caractères au hasard.
Colonne de droite - en bleu : depuis la colonne de gauche, chaque chaîne est triée par ordre alphabétique et l'ensemble est "rebattu".
Au milieu et en-dessous : expressions régulières "préparées" par la colonne de droite, 'matchant' une chaîne de la colonne de gauche, et permettant ainsi de rétablir l'équivalence entre les chaînes des colonnes.
Problématique illustrée : l'opérateur logique "ET" n'existe pas dans la syntaxes des expressions régulières.
Il reste possible de relier logiquement plusieurs appels d'une même méthode.
Exemple en JavaScript : chaine.match(/a/) && chaine.match(/b/)
.
Cela permet de savoir si "chaine" contient à la fois les lettres "a" et "b" sans tenir compte de leur ordre d'apparition.
Mais cela peut vite s'avérer lourd à coder.
Autre solution pour "a" et "b" dans le désordre : chercher une chaine dont le début "^" soit suivi "(?=)" de caractères divers optionnels ".*" composés au minimum d'une fois "{1}" la lettre "a", et soit aussi suivi de caractères divers dont un "b".
Soit : /^(?=(.*a){1})(?=(.*b){1}).{3}$/
Cet exemple se finit par un filtre terminal ".{3}$" : la chaine à identifier ne doit être composée que de trois caractères.
Lecture du principe sur regex - Regular Expressions: Is there an AND operator? - Stack Overflow ; Github.