hi CosmoKnacki,
le look ahead n'est pas nécessaire : ) (puisque c'est de toute facon ce qu'on veut capturer...)
edit:
Code:
1
2 txt = txt.replace(/(?<!\S)([2-9]\d*|1\d+)(?!\S)/g, m => m*8);
Version imprimable
hi CosmoKnacki,
le look ahead n'est pas nécessaire : ) (puisque c'est de toute facon ce qu'on veut capturer...)
edit:
Code:
1
2 txt = txt.replace(/(?<!\S)([2-9]\d*|1\d+)(?!\S)/g, m => m*8);
@galerien69
Le rôle du lookahead (?!\S) est de contrôler que le nombre n'est pas suivi par autre chose qu'un caractère blanc ou la fin de la chaîne. De plus, comme celui-ci n'est qu'un test qui ne consomme pas de caractères, cela permet des matches successifs, par exemple avec la chaîne "12 24 13 46" et la pattern (?:^|\s)([2-9]\d*|1\d+)(?:\s|$) je n'obtiendrai qu'un nombre sur deux (puisque les espaces ne peuvent être consommés deux fois).
Si maintenant tu voulais parler du groupe non-capturant (?:...), son intérêt est justement de grouper sans générer de capture.
@NoSmoking
C'est gentil, mais tu sais il y en à d'autres sur ce forum, et quant à ceux qui ont des doutes sur le sujet, ils ne se débrouillent pas si mal en fin de compte.Citation:
devine à qui je pensais
je parle pas du negative lookahead mais bien dulook aheadnon capturing group (dont j'ai copié le code dans l'edit de mon dernier post)
je le recopie colle:
et vu que le matching correspond ici auCode:
1
2
3
4
5 > txt="12 24 13 46" '12 24 13 46' > txt = txt.replace(/(?<!\S)([2-9]\d*|1\d+)(?!\S)/g, m => m*8); '96 192 104 368'
lookhead (?: )groupe capturé , ben on peut se priver du (?: ) et simplement capturer
Oui, on peut et ça ne change pas le résultat. Mais un des intérêts du groupe non capturant, c'est d'éviter le coût d'une capture (stockage d'une partie du match en plus du match). Utiliser une capture n'a de sens que lorsqu'on à besoin d'agir ou d'extraire une partie du match. En fait tu devrais te poser la question dans l'autre sens: ai-je besoin de capturer?
Hello,
c'est ici le salon où on se réunit pour discuter autour d'un string ? :langue2:
Vous buvez quoi ? café ? thé ? bière ? cognac ? * :chin:
* A boire avec modération...
(avec "modérateur", ça marche aussi ou pas ?) :whistle:
oui (je suis d'accord)Citation:
En fait tu devrais te poser la question dans l'autre sens: ai-je besoin de capturer?
en fait j'ai fait l'amalgame (comme le suggère mes barrés) entre non capturing et lookahead et comme un lookahead ne fail pas forcément la regex (vu qu'il consomme pas et que faut potentiellement attendre apres) le premier réflexe était de ne pas faire un lookahead. sauf que c'était pas un lookahead mais un groupe non capturant :aie::aie:
Pour moi ce sera un AquaRosa glacé avec un assortiment de mignardises bio.