Ceci devrait répondre à tes questions à propos des replace(), dans
lesquels tu croyais que les parenthèses capturantes devaient capturer
ou non des caractères dans le résultat global : non, ça ne change
strictement rien au motif validé par l'expression rationnelle complète.
Bon et alors comment faire un replace avec le $2 ?
comme pour :
javascript:with('trucmuche'){replace(match(/(?:m)(w+)/)[1],'oche')}
javascript:'trucmuche'.match(/(?:m)(w+)/)
-> muche,uche
javascript:alert('trucmuche'.replace(/(?:m)(w+)/,$2'oche'))
javascript:alert('trucmuche'.replace(/(?:m)(w+)/,'$1 oche'))
-> trucuche oche ???
On me dit qque part (MDC) que les $n ne sont pas acceptés avec les non
capturantes :-(
C'est malin !
---------------------------------------------------------------------
Pendant qu'on y est, je signale que ces parenthèses capturantes peuvent
être très pratiques grâce aux « références arrières ». [...]
Mézoudonc as-tu trouvé cette astuce ?
Exercice pour le lecteur : quelles sont les chaînes reconnues par
l'expression suivante ?
/the (red|white) king and the (?!1)(red|white) queen/
Trop dur !
alors ... on trouve 'red' c'est tout bon
donc 'the red king and the ' seulement si ce n'est pas suivi de 'red'
reste à la ligne 1 : 'red queen' donc pas good
kifkif pour ligne 2 'white' -> 'white queen' -> pas good non plus
je vote pour la ligne 3
Va m'falloir ajouter tous ces exos à ma liste de demos :-/
Si jamais qqu'un visite cette page et me pose des questions je te le
renverrai.
Nota : à faire -> rajouter un lien vers Olivier pour tte question ;-)
Ceci devrait répondre à tes questions à propos des replace(), dans
lesquels tu croyais que les parenthèses capturantes devaient capturer
ou non des caractères dans le résultat global : non, ça ne change
strictement rien au motif validé par l'expression rationnelle complète.
Bon et alors comment faire un replace avec le $2 ?
comme pour :
javascript:with('trucmuche'){replace(match(/(?:m)(w+)/)[1],'oche')}
javascript:'trucmuche'.match(/(?:m)(w+)/)
-> muche,uche
javascript:alert('trucmuche'.replace(/(?:m)(w+)/,$2'oche'))
javascript:alert('trucmuche'.replace(/(?:m)(w+)/,'$1 oche'))
-> trucuche oche ???
On me dit qque part (MDC) que les $n ne sont pas acceptés avec les non
capturantes :-(
C'est malin !
---------------------------------------------------------------------
Pendant qu'on y est, je signale que ces parenthèses capturantes peuvent
être très pratiques grâce aux « références arrières ». [...]
Mézoudonc as-tu trouvé cette astuce ?
Exercice pour le lecteur : quelles sont les chaînes reconnues par
l'expression suivante ?
/the (red|white) king and the (?!1)(red|white) queen/
Trop dur !
alors ... on trouve 'red' c'est tout bon
donc 'the red king and the ' seulement si ce n'est pas suivi de 'red'
reste à la ligne 1 : 'red queen' donc pas good
kifkif pour ligne 2 'white' -> 'white queen' -> pas good non plus
je vote pour la ligne 3
Va m'falloir ajouter tous ces exos à ma liste de demos :-/
Si jamais qqu'un visite cette page et me pose des questions je te le
renverrai.
Nota : à faire -> rajouter un lien vers Olivier pour tte question ;-)
Ceci devrait répondre à tes questions à propos des replace(), dans
lesquels tu croyais que les parenthèses capturantes devaient capturer
ou non des caractères dans le résultat global : non, ça ne change
strictement rien au motif validé par l'expression rationnelle complète.
Bon et alors comment faire un replace avec le $2 ?
comme pour :
javascript:with('trucmuche'){replace(match(/(?:m)(w+)/)[1],'oche')}
javascript:'trucmuche'.match(/(?:m)(w+)/)
-> muche,uche
javascript:alert('trucmuche'.replace(/(?:m)(w+)/,$2'oche'))
javascript:alert('trucmuche'.replace(/(?:m)(w+)/,'$1 oche'))
-> trucuche oche ???
On me dit qque part (MDC) que les $n ne sont pas acceptés avec les non
capturantes :-(
C'est malin !
---------------------------------------------------------------------
Pendant qu'on y est, je signale que ces parenthèses capturantes peuvent
être très pratiques grâce aux « références arrières ». [...]
Mézoudonc as-tu trouvé cette astuce ?
Exercice pour le lecteur : quelles sont les chaînes reconnues par
l'expression suivante ?
/the (red|white) king and the (?!1)(red|white) queen/
Trop dur !
alors ... on trouve 'red' c'est tout bon
donc 'the red king and the ' seulement si ce n'est pas suivi de 'red'
reste à la ligne 1 : 'red queen' donc pas good
kifkif pour ligne 2 'white' -> 'white queen' -> pas good non plus
je vote pour la ligne 3
Va m'falloir ajouter tous ces exos à ma liste de demos :-/
Si jamais qqu'un visite cette page et me pose des questions je te le
renverrai.
Nota : à faire -> rajouter un lien vers Olivier pour tte question ;-)
<http://toutjavascript.com/service/regexp.php>
C'est très bien. Pour comprendre les parenthèses capturantes, essaye-le
avec l'option « match » (celle en haut à droite, car l'autre fait en
réalité un « search »), et en décochant « recherche globale ».
Je pense que j'y arrive avec les capturantes.
Ce sont les non capturantes qui à mon sens ne font pas ce qu'il faut.
J'ai d'ailleurs le même pb avec b (limite de mot)
-> pour moi la limite du mot est le blanc à côté et non pas la lettre
d'extrémité. (ce qui, à la réflexion est assez idiot, mébon)
<http://toutjavascript.com/service/regexp.php>
C'est très bien. Pour comprendre les parenthèses capturantes, essaye-le
avec l'option « match » (celle en haut à droite, car l'autre fait en
réalité un « search »), et en décochant « recherche globale ».
Je pense que j'y arrive avec les capturantes.
Ce sont les non capturantes qui à mon sens ne font pas ce qu'il faut.
J'ai d'ailleurs le même pb avec b (limite de mot)
-> pour moi la limite du mot est le blanc à côté et non pas la lettre
d'extrémité. (ce qui, à la réflexion est assez idiot, mébon)
<http://toutjavascript.com/service/regexp.php>
C'est très bien. Pour comprendre les parenthèses capturantes, essaye-le
avec l'option « match » (celle en haut à droite, car l'autre fait en
réalité un « search »), et en décochant « recherche globale ».
Je pense que j'y arrive avec les capturantes.
Ce sont les non capturantes qui à mon sens ne font pas ce qu'il faut.
J'ai d'ailleurs le même pb avec b (limite de mot)
-> pour moi la limite du mot est le blanc à côté et non pas la lettre
d'extrémité. (ce qui, à la réflexion est assez idiot, mébon)
[ copie (sans suivi pour le moment) vers fr.comp.lang.regexp ]
Le 11/01/2009 16:12, SAM a écrit :Je pense que j'y arrive avec les capturantes.
Ce sont les non capturantes qui à mon sens ne font pas ce qu'il faut.
Cf. mon autre réponse. Les parenthèses capturantes ne font *rien*. Si tu
t'attends à ce qu'elles fassent quelque chose, c'est normal que tu sois
déçu. ;-)
[ copie (sans suivi pour le moment) vers fr.comp.lang.regexp ]
Le 11/01/2009 16:12, SAM a écrit :
Je pense que j'y arrive avec les capturantes.
Ce sont les non capturantes qui à mon sens ne font pas ce qu'il faut.
Cf. mon autre réponse. Les parenthèses capturantes ne font *rien*. Si tu
t'attends à ce qu'elles fassent quelque chose, c'est normal que tu sois
déçu. ;-)
[ copie (sans suivi pour le moment) vers fr.comp.lang.regexp ]
Le 11/01/2009 16:12, SAM a écrit :Je pense que j'y arrive avec les capturantes.
Ce sont les non capturantes qui à mon sens ne font pas ce qu'il faut.
Cf. mon autre réponse. Les parenthèses capturantes ne font *rien*. Si tu
t'attends à ce qu'elles fassent quelque chose, c'est normal que tu sois
déçu. ;-)
Mébon, je l'ai peut-être simplement lu
dans la doc.
Mais (?!1) interdit que le deuxième adjectif soit le même que le
premier, il reste donc les deux phrases :
"the red king and the white queen"
"the white king and the red queen"
Pour information, je constate, ô joie, que le groupe fr.comp.lang.regexp
vient tout juste d'être créé, alors je fais une copie de ma réponse
là-bas (sans y placer le suivi car je ne suis pas sûr que tout le monde
y ait accès aussi vite que moi).
Mébon, je l'ai peut-être simplement lu
dans la doc.
Mais (?!1) interdit que le deuxième adjectif soit le même que le
premier, il reste donc les deux phrases :
"the red king and the white queen"
"the white king and the red queen"
Pour information, je constate, ô joie, que le groupe fr.comp.lang.regexp
vient tout juste d'être créé, alors je fais une copie de ma réponse
là-bas (sans y placer le suivi car je ne suis pas sûr que tout le monde
y ait accès aussi vite que moi).
Mébon, je l'ai peut-être simplement lu
dans la doc.
Mais (?!1) interdit que le deuxième adjectif soit le même que le
premier, il reste donc les deux phrases :
"the red king and the white queen"
"the white king and the red queen"
Pour information, je constate, ô joie, que le groupe fr.comp.lang.regexp
vient tout juste d'être créé, alors je fais une copie de ma réponse
là-bas (sans y placer le suivi car je ne suis pas sûr que tout le monde
y ait accès aussi vite que moi).
Salut !
Le 11/01/2009 16:05, SAM a écrit :Ceci devrait répondre à tes questions à propos des replace(),
dans lesquels tu croyais que les parenthèses capturantes devaient
capturer ou non des caractères dans le résultat global : non, ça
ne change strictement rien au motif validé par l'expression
rationnelle complète.
Bon et alors comment faire un replace avec le $2 ? comme pour :
javascript:with('trucmuche'){replace(match(/(?:m)(w+)/)[1],'oche')}
Je ne comprends pas bien ce que tu cherches à faire ici, mais en tout
cas il n'y a pas de $2 dans /(?:m)(w+)/ puisque c'est strictement
équivalent à /m(w+)/ !javascript:'trucmuche'.match(/(?:m)(w+)/) -> muche,uche
Oui. Idem avec javascript:'trucmuche'.match(/m(w+)/) : la chaîne
complète est "muche", et le contenu de la seule paire de parenthèses
capturantes est "uche".
On me dit qque part (MDC) que les $n ne sont pas acceptés avec les
non capturantes :-( C'est malin !
Je te signale dans ton oreille que c'est exactement à ça que cela
sert : à ne *rien* faire.
Bien sûr, il n'est pas très utile d'écrire /(?:m)/
alors que c'est exactement pareil que /m/ ! En revanche, quand les
parenthèses sont obligatoires pour regrouper les termes d'une
alterna- tive avec des « | », alors là c'est bien pratique.
Je prends un exemple. Supposons que tu aies une chaîne constituée de
trois noms, séparés par " " ou par "::" ou par "--", le séparateur
n'ayant pas d'importance. Par exemple : Martin Dupont Durand ou :
Martin::Dupont::Durand ou encore : Martin--Dupont--Durand
L'expression qui va bien est quelque chose comme ça : /.*( |::|--).*(
|::|--).*/
Ce qui t'intéresse, c'est de récupérer les trois noms. Tu peux alors
écrire : /(.*)( |::|--)(.*)( |::|--)(.*)/ Résultat : $1 = Martin $2 > :: (par exemple) $3 = Dupont $4 = :: (idem) $5 = Durand
Mais pourquoi t'embarrasser des séparateurs dont tu n'as que faire ?
Tu remplaces alors les parenthèses capturantes par des non
capturantes : /(.*)(?: |::|--)(.*)(?: |::|--)(.*)/ Résultat : $1 > Martin $2 = Dupont $3 = Durand
Et voilà !
---------------------------------------------------------------------
Pendant qu'on y est, je signale que ces parenthèses capturantes
peuvent être très pratiques grâce aux « références arrières ».
[...]
Mézoudonc as-tu trouvé cette astuce ?
Je ne sais plus. Tu sais, ça fait plus de vingt ans que je pratique
l'éditeur de texte vi, alors les expressions rationnelles c'est comme
si j'étais tombé dedans étant petit. Mébon, je l'ai peut-être
simplement lu dans la doc.Exercice pour le lecteur : quelles sont les chaînes reconnues par
l'expression suivante ? /the (red|white) king and the
(?!1)(red|white) queen/
Trop dur !
alors ... on trouve 'red' c'est tout bon donc 'the red king and the
' seulement si ce n'est pas suivi de 'red' reste à la ligne 1 :
'red queen' donc pas good kifkif pour ligne 2 'white' -> 'white
queen' -> pas good non plus je vote pour la ligne 3
Solution : Si on ne tient pas compte de l'assertion négative (?!1),
les quatre chaînes possibles sont : "the red king and the red queen"
"the red king and the white queen" "the white king and the red queen"
"the white king and the white queen"
Mais (?!1) interdit que le deuxième adjectif soit le même que le
premier, il reste donc les deux phrases : "the red king and the white
queen" "the white king and the red queen"
Si jamais qqu'un visite cette page et me pose des questions je te
le renverrai. Nota : à faire -> rajouter un lien vers Olivier pour
tte question ;-)
Pour information, je constate, ô joie, que le groupe
fr.comp.lang.regexp vient tout juste d'être créé, alors je fais une
copie de ma réponse là-bas (sans y placer le suivi car je ne suis pas
sûr que tout le monde y ait accès aussi vite que moi).
Salut !
Le 11/01/2009 16:05, SAM a écrit :
Ceci devrait répondre à tes questions à propos des replace(),
dans lesquels tu croyais que les parenthèses capturantes devaient
capturer ou non des caractères dans le résultat global : non, ça
ne change strictement rien au motif validé par l'expression
rationnelle complète.
Bon et alors comment faire un replace avec le $2 ? comme pour :
javascript:with('trucmuche'){replace(match(/(?:m)(w+)/)[1],'oche')}
Je ne comprends pas bien ce que tu cherches à faire ici, mais en tout
cas il n'y a pas de $2 dans /(?:m)(w+)/ puisque c'est strictement
équivalent à /m(w+)/ !
javascript:'trucmuche'.match(/(?:m)(w+)/) -> muche,uche
Oui. Idem avec javascript:'trucmuche'.match(/m(w+)/) : la chaîne
complète est "muche", et le contenu de la seule paire de parenthèses
capturantes est "uche".
On me dit qque part (MDC) que les $n ne sont pas acceptés avec les
non capturantes :-( C'est malin !
Je te signale dans ton oreille que c'est exactement à ça que cela
sert : à ne *rien* faire.
Bien sûr, il n'est pas très utile d'écrire /(?:m)/
alors que c'est exactement pareil que /m/ ! En revanche, quand les
parenthèses sont obligatoires pour regrouper les termes d'une
alterna- tive avec des « | », alors là c'est bien pratique.
Je prends un exemple. Supposons que tu aies une chaîne constituée de
trois noms, séparés par " " ou par "::" ou par "--", le séparateur
n'ayant pas d'importance. Par exemple : Martin Dupont Durand ou :
Martin::Dupont::Durand ou encore : Martin--Dupont--Durand
L'expression qui va bien est quelque chose comme ça : /.*( |::|--).*(
|::|--).*/
Ce qui t'intéresse, c'est de récupérer les trois noms. Tu peux alors
écrire : /(.*)( |::|--)(.*)( |::|--)(.*)/ Résultat : $1 = Martin $2 > :: (par exemple) $3 = Dupont $4 = :: (idem) $5 = Durand
Mais pourquoi t'embarrasser des séparateurs dont tu n'as que faire ?
Tu remplaces alors les parenthèses capturantes par des non
capturantes : /(.*)(?: |::|--)(.*)(?: |::|--)(.*)/ Résultat : $1 > Martin $2 = Dupont $3 = Durand
Et voilà !
---------------------------------------------------------------------
Pendant qu'on y est, je signale que ces parenthèses capturantes
peuvent être très pratiques grâce aux « références arrières ».
[...]
Mézoudonc as-tu trouvé cette astuce ?
Je ne sais plus. Tu sais, ça fait plus de vingt ans que je pratique
l'éditeur de texte vi, alors les expressions rationnelles c'est comme
si j'étais tombé dedans étant petit. Mébon, je l'ai peut-être
simplement lu dans la doc.
Exercice pour le lecteur : quelles sont les chaînes reconnues par
l'expression suivante ? /the (red|white) king and the
(?!1)(red|white) queen/
Trop dur !
alors ... on trouve 'red' c'est tout bon donc 'the red king and the
' seulement si ce n'est pas suivi de 'red' reste à la ligne 1 :
'red queen' donc pas good kifkif pour ligne 2 'white' -> 'white
queen' -> pas good non plus je vote pour la ligne 3
Solution : Si on ne tient pas compte de l'assertion négative (?!1),
les quatre chaînes possibles sont : "the red king and the red queen"
"the red king and the white queen" "the white king and the red queen"
"the white king and the white queen"
Mais (?!1) interdit que le deuxième adjectif soit le même que le
premier, il reste donc les deux phrases : "the red king and the white
queen" "the white king and the red queen"
Si jamais qqu'un visite cette page et me pose des questions je te
le renverrai. Nota : à faire -> rajouter un lien vers Olivier pour
tte question ;-)
Pour information, je constate, ô joie, que le groupe
fr.comp.lang.regexp vient tout juste d'être créé, alors je fais une
copie de ma réponse là-bas (sans y placer le suivi car je ne suis pas
sûr que tout le monde y ait accès aussi vite que moi).
Salut !
Le 11/01/2009 16:05, SAM a écrit :Ceci devrait répondre à tes questions à propos des replace(),
dans lesquels tu croyais que les parenthèses capturantes devaient
capturer ou non des caractères dans le résultat global : non, ça
ne change strictement rien au motif validé par l'expression
rationnelle complète.
Bon et alors comment faire un replace avec le $2 ? comme pour :
javascript:with('trucmuche'){replace(match(/(?:m)(w+)/)[1],'oche')}
Je ne comprends pas bien ce que tu cherches à faire ici, mais en tout
cas il n'y a pas de $2 dans /(?:m)(w+)/ puisque c'est strictement
équivalent à /m(w+)/ !javascript:'trucmuche'.match(/(?:m)(w+)/) -> muche,uche
Oui. Idem avec javascript:'trucmuche'.match(/m(w+)/) : la chaîne
complète est "muche", et le contenu de la seule paire de parenthèses
capturantes est "uche".
On me dit qque part (MDC) que les $n ne sont pas acceptés avec les
non capturantes :-( C'est malin !
Je te signale dans ton oreille que c'est exactement à ça que cela
sert : à ne *rien* faire.
Bien sûr, il n'est pas très utile d'écrire /(?:m)/
alors que c'est exactement pareil que /m/ ! En revanche, quand les
parenthèses sont obligatoires pour regrouper les termes d'une
alterna- tive avec des « | », alors là c'est bien pratique.
Je prends un exemple. Supposons que tu aies une chaîne constituée de
trois noms, séparés par " " ou par "::" ou par "--", le séparateur
n'ayant pas d'importance. Par exemple : Martin Dupont Durand ou :
Martin::Dupont::Durand ou encore : Martin--Dupont--Durand
L'expression qui va bien est quelque chose comme ça : /.*( |::|--).*(
|::|--).*/
Ce qui t'intéresse, c'est de récupérer les trois noms. Tu peux alors
écrire : /(.*)( |::|--)(.*)( |::|--)(.*)/ Résultat : $1 = Martin $2 > :: (par exemple) $3 = Dupont $4 = :: (idem) $5 = Durand
Mais pourquoi t'embarrasser des séparateurs dont tu n'as que faire ?
Tu remplaces alors les parenthèses capturantes par des non
capturantes : /(.*)(?: |::|--)(.*)(?: |::|--)(.*)/ Résultat : $1 > Martin $2 = Dupont $3 = Durand
Et voilà !
---------------------------------------------------------------------
Pendant qu'on y est, je signale que ces parenthèses capturantes
peuvent être très pratiques grâce aux « références arrières ».
[...]
Mézoudonc as-tu trouvé cette astuce ?
Je ne sais plus. Tu sais, ça fait plus de vingt ans que je pratique
l'éditeur de texte vi, alors les expressions rationnelles c'est comme
si j'étais tombé dedans étant petit. Mébon, je l'ai peut-être
simplement lu dans la doc.Exercice pour le lecteur : quelles sont les chaînes reconnues par
l'expression suivante ? /the (red|white) king and the
(?!1)(red|white) queen/
Trop dur !
alors ... on trouve 'red' c'est tout bon donc 'the red king and the
' seulement si ce n'est pas suivi de 'red' reste à la ligne 1 :
'red queen' donc pas good kifkif pour ligne 2 'white' -> 'white
queen' -> pas good non plus je vote pour la ligne 3
Solution : Si on ne tient pas compte de l'assertion négative (?!1),
les quatre chaînes possibles sont : "the red king and the red queen"
"the red king and the white queen" "the white king and the red queen"
"the white king and the white queen"
Mais (?!1) interdit que le deuxième adjectif soit le même que le
premier, il reste donc les deux phrases : "the red king and the white
queen" "the white king and the red queen"
Si jamais qqu'un visite cette page et me pose des questions je te
le renverrai. Nota : à faire -> rajouter un lien vers Olivier pour
tte question ;-)
Pour information, je constate, ô joie, que le groupe
fr.comp.lang.regexp vient tout juste d'être créé, alors je fais une
copie de ma réponse là-bas (sans y placer le suivi car je ne suis pas
sûr que tout le monde y ait accès aussi vite que moi).
Cf. mon autre réponse. Les parenthèses capturantes ne font *rien*. Si tu
t'attends à ce qu'elles fassent quelque chose, c'est normal que tu sois
déçu. ;-)
'trucmuche'.match(/(?:m)(w+)/)
Ben si elles font qque chose puisque le 'm' *non capturé* est non
seulement capturé/attrapé/repéré/toussa mais poubéllisé !
Ça ne capture pas puisqu'on ne le retrouve pas à la sortie, bon OK, soit!
Mais ça ne le laisse pas à sa place lors d'un replace.
Il a été jeté aux orties.
En fait j'aurais cru que ça fonctionnait comme l'assertion b
mais pour n'importe quel caractère choisi (peut importe sa place)
Cf. mon autre réponse. Les parenthèses capturantes ne font *rien*. Si tu
t'attends à ce qu'elles fassent quelque chose, c'est normal que tu sois
déçu. ;-)
'trucmuche'.match(/(?:m)(w+)/)
Ben si elles font qque chose puisque le 'm' *non capturé* est non
seulement capturé/attrapé/repéré/toussa mais poubéllisé !
Ça ne capture pas puisqu'on ne le retrouve pas à la sortie, bon OK, soit!
Mais ça ne le laisse pas à sa place lors d'un replace.
Il a été jeté aux orties.
En fait j'aurais cru que ça fonctionnait comme l'assertion b
mais pour n'importe quel caractère choisi (peut importe sa place)
Cf. mon autre réponse. Les parenthèses capturantes ne font *rien*. Si tu
t'attends à ce qu'elles fassent quelque chose, c'est normal que tu sois
déçu. ;-)
'trucmuche'.match(/(?:m)(w+)/)
Ben si elles font qque chose puisque le 'm' *non capturé* est non
seulement capturé/attrapé/repéré/toussa mais poubéllisé !
Ça ne capture pas puisqu'on ne le retrouve pas à la sortie, bon OK, soit!
Mais ça ne le laisse pas à sa place lors d'un replace.
Il a été jeté aux orties.
En fait j'aurais cru que ça fonctionnait comme l'assertion b
mais pour n'importe quel caractère choisi (peut importe sa place)
Ah ouais, mais si tu lis les docs, c'est pas du jeu ;-)
Mais (?!1) interdit que le deuxième adjectif soit le même que le
premier, il reste donc les deux phrases :
"the red king and the white queen"
"the white king and the red queen"
Sympa, je savais pas qu'on pouvait dire « pas pareil que » en regex.
Je sens que ça va être un plaisir à lire, ce groupe :-)
Ah ouais, mais si tu lis les docs, c'est pas du jeu ;-)
Mais (?!1) interdit que le deuxième adjectif soit le même que le
premier, il reste donc les deux phrases :
"the red king and the white queen"
"the white king and the red queen"
Sympa, je savais pas qu'on pouvait dire « pas pareil que » en regex.
Je sens que ça va être un plaisir à lire, ce groupe :-)
Ah ouais, mais si tu lis les docs, c'est pas du jeu ;-)
Mais (?!1) interdit que le deuxième adjectif soit le même que le
premier, il reste donc les deux phrases :
"the red king and the white queen"
"the white king and the red queen"
Sympa, je savais pas qu'on pouvait dire « pas pareil que » en regex.
Je sens que ça va être un plaisir à lire, ce groupe :-)
ne valide les 2 1ières ligne l'expression :
/the (red|white) king and the 1 queen/
(de même que ma "démo" !)
Si jamais qqu'un visite cette page et me pose des questions je te
le renverrai. Nota : à faire -> rajouter un lien vers Olivier pour
tte question ;-)
C'est fait.
je mets en ligne ?
ne valide les 2 1ières ligne l'expression :
/the (red|white) king and the 1 queen/
(de même que ma "démo" !)
Si jamais qqu'un visite cette page et me pose des questions je te
le renverrai. Nota : à faire -> rajouter un lien vers Olivier pour
tte question ;-)
C'est fait.
je mets en ligne ?
ne valide les 2 1ières ligne l'expression :
/the (red|white) king and the 1 queen/
(de même que ma "démo" !)
Si jamais qqu'un visite cette page et me pose des questions je te
le renverrai. Nota : à faire -> rajouter un lien vers Olivier pour
tte question ;-)
C'est fait.
je mets en ligne ?
Le 12/01/2009 00:38, SAM a écrit :Cf. mon autre réponse. Les parenthèses capturantes ne font *rien*. Si tu
t'attends à ce qu'elles fassent quelque chose, c'est normal que tu sois
déçu. ;-)
'trucmuche'.match(/(?:m)(w+)/)
Ben si elles font qque chose puisque le 'm' *non capturé* est non
seulement capturé/attrapé/repéré/toussa mais poubéllisé !
Euh... ben non...
Essaye donc avec 'trucmuche'.match(/m(w+)/) pour voir si tu constates
une différence avec 'trucmuche'.match(/(?:m)(w+)/) !
D'ailleurs je le fais avec http://toutjavascript.com/service/regexp.php
(?:m)(w+)
trucmuche
match
2 sous-chaînes vérifient l'expression régulière :
sous-chaîne 00 : muche
sous-chaîne 01 : uche
Ça ne capture pas puisqu'on ne le retrouve pas à la sortie, bon OK, soit!
Mais si ! Le résultat global est "muche", avec le m.
Mais ça ne le laisse pas à sa place lors d'un replace.
Il a été jeté aux orties.
Ben oui, si tu remplaces "muche" par autre chose, ça vire "muche". Et si
tu remplaces "muche" par "$1" c'est-à-dire par "uche", ça vire le "m".
En fait j'aurais cru que ça fonctionnait comme l'assertion b
mais pour n'importe quel caractère choisi (peut importe sa place)
Non, non, ce n'est pas une assertion. C'est « rien ».
Le 12/01/2009 00:38, SAM a écrit :
Cf. mon autre réponse. Les parenthèses capturantes ne font *rien*. Si tu
t'attends à ce qu'elles fassent quelque chose, c'est normal que tu sois
déçu. ;-)
'trucmuche'.match(/(?:m)(w+)/)
Ben si elles font qque chose puisque le 'm' *non capturé* est non
seulement capturé/attrapé/repéré/toussa mais poubéllisé !
Euh... ben non...
Essaye donc avec 'trucmuche'.match(/m(w+)/) pour voir si tu constates
une différence avec 'trucmuche'.match(/(?:m)(w+)/) !
D'ailleurs je le fais avec http://toutjavascript.com/service/regexp.php
(?:m)(w+)
trucmuche
match
2 sous-chaînes vérifient l'expression régulière :
sous-chaîne 00 : muche
sous-chaîne 01 : uche
Ça ne capture pas puisqu'on ne le retrouve pas à la sortie, bon OK, soit!
Mais si ! Le résultat global est "muche", avec le m.
Mais ça ne le laisse pas à sa place lors d'un replace.
Il a été jeté aux orties.
Ben oui, si tu remplaces "muche" par autre chose, ça vire "muche". Et si
tu remplaces "muche" par "$1" c'est-à-dire par "uche", ça vire le "m".
En fait j'aurais cru que ça fonctionnait comme l'assertion b
mais pour n'importe quel caractère choisi (peut importe sa place)
Non, non, ce n'est pas une assertion. C'est « rien ».
Le 12/01/2009 00:38, SAM a écrit :Cf. mon autre réponse. Les parenthèses capturantes ne font *rien*. Si tu
t'attends à ce qu'elles fassent quelque chose, c'est normal que tu sois
déçu. ;-)
'trucmuche'.match(/(?:m)(w+)/)
Ben si elles font qque chose puisque le 'm' *non capturé* est non
seulement capturé/attrapé/repéré/toussa mais poubéllisé !
Euh... ben non...
Essaye donc avec 'trucmuche'.match(/m(w+)/) pour voir si tu constates
une différence avec 'trucmuche'.match(/(?:m)(w+)/) !
D'ailleurs je le fais avec http://toutjavascript.com/service/regexp.php
(?:m)(w+)
trucmuche
match
2 sous-chaînes vérifient l'expression régulière :
sous-chaîne 00 : muche
sous-chaîne 01 : uche
Ça ne capture pas puisqu'on ne le retrouve pas à la sortie, bon OK, soit!
Mais si ! Le résultat global est "muche", avec le m.
Mais ça ne le laisse pas à sa place lors d'un replace.
Il a été jeté aux orties.
Ben oui, si tu remplaces "muche" par autre chose, ça vire "muche". Et si
tu remplaces "muche" par "$1" c'est-à-dire par "uche", ça vire le "m".
En fait j'aurais cru que ça fonctionnait comme l'assertion b
mais pour n'importe quel caractère choisi (peut importe sa place)
Non, non, ce n'est pas une assertion. C'est « rien ».
Pour information, je constate, ô joie, que le groupe fr.comp.lang.regexp
vient tout juste d'être créé
Je sans que ça va être un plaisir à lire, ce groupe :-)
Pour information, je constate, ô joie, que le groupe fr.comp.lang.regexp
vient tout juste d'être créé
Je sans que ça va être un plaisir à lire, ce groupe :-)
Pour information, je constate, ô joie, que le groupe fr.comp.lang.regexp
vient tout juste d'être créé
Je sans que ça va être un plaisir à lire, ce groupe :-)