Les références arrières dans la regex elle-même en JavaScript
Le contenu des groupes de capture est accessible non seulement dans la chaîne de remplacement, mais aussi dans la regex elle-même : nous pouvons mettre quelque chose dans un groupe, puis dire directement dans la regex que le contenu de ce groupe doit apparaître ici.
Le contenu des groupes de capture est accessible par leurs numéros,
précédés d'un antislash. Par exemple,
le premier groupe sera accessible comme ceci : \1,
le deuxième groupe comme ceci - \2, le troisième
- \3 et ainsi de suite.
Je suis sûr que tout ce qui est écrit ci-dessus est encore très flou pour vous. Ce n'est pas étonnant, car les groupes de capture sont l'aspect le plus difficile à comprendre des expressions régulières. Comprenons cela à l'aide d'exemples.
Exemple
Supposons que nous ayons une chaîne comme celle-ci :
let str = 'aa bb cd ef';
Trouvons-y tous les endroits où deux lettres identiques quelconques se suivent. Pour résoudre le problème, nous allons chercher n'importe quelle lettre, la mettre dans un groupe, puis vérifier si le caractère suivant est le contenu de ce groupe :
let res = str.replace(/([a-z])\1/g, '!');
En conséquence, la variable contiendra ce qui suit :
'! ! cd ef'
Exemple
Supposons que nous ayons une chaîne comme celle-ci :
let str = 'asxca buzxb csgd';
Trouvons-y tous les mots dont la première et la dernière lettre sont identiques. Pour résoudre le problème, écrivons le motif suivant : une lettre, puis une ou plusieurs lettres supplémentaires, puis la même lettre que la première :
let res = str.replace(/([a-z])[a-z]+\1/g, '!');
En conséquence, la variable contiendra ce qui suit :
'! ! csgd'
Problèmes pratiques
Soit une chaîne :
let str = 'aaa bbb ccc xyz';
Trouvez toutes les sous-chaînes où il y a trois lettres identiques consécutives.
Soit une chaîne :
let str = 'a aa aaa aaaa aaaaa';
Trouvez toutes les sous-chaînes où il y a deux lettres identiques ou plus consécutives.
Soit une chaîne :
let str = 'aaa aaa bbb bbb ccc ddd';
Trouvez toutes les sous-chaînes où il y a deux mots identiques consécutifs.