Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

gestion des raccourcis

44 réponses
Avatar
J-F Portala
Bonjour,
je me pose la question suivante:

est il possible d'utiliser les touches F1 à F12 comme raccourcis clavier
dans un formulaire.
Les touches F5, F6 etc correspondant à un submit particulier, c'est à dire
que la gestion du submit tient compte de la touche qui a été pressée.
C'est pour éviter d'utiliser la souris ou les touhces tab pour valider un
submit particulier.

J'ai vu sur le net des accesskey mais il faut utiliser la touche alt en
combinaison.

Y a t il des solutions?

Merci de votre aide

Jeff

10 réponses

1 2 3 4 5
Avatar
Olivier Miakinen
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".


javascript:alert('trucmuche'.replace(/(?:m)(w+)/,$2'oche'))



Impossible, pas de $2.

javascript:alert('trucmuche'.replace(/(?:m)(w+)/,'$1 oche'))
-> trucuche oche ???



Oui, tu remplaces "muche" par "uche oche".

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"

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 ;-)



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).
Avatar
Olivier Miakinen
[ copie (sans suivi pour le moment) vers fr.comp.lang.regexp ]

Le 11/01/2009 16:12, SAM a écrit :

<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.



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. ;-)

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)



Ce n'est ni l'un ni l'autre. Le b est une assertion, donc quelque chose
qui ne consomme aucun caractère : pas plus la lettre qui est d'un côté
que la non-lettre qui est de l'autre.
Avatar
SAM
Le 1/11/09 11:18 PM, Olivier Miakinen a écrit :
[ copie (sans suivi pour le moment) vers fr.comp.lang.regexp ]



Ha! ben si il y est en suivi.
Et non, je ne parviens pas à m'y abonner depuis Orange.

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. ;-)



'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é !
En fait il faudrait appeler ça parenthèses poubelles ou poubellisantes.

Ç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)

Voili, voilou, pour l'exposé de mon blocage.
(en + j'ai qques difficultés d'oreille ;-) )
--
sm
Avatar
mpg
Le (on) dimanche 11 janvier 2009 23:13, Olivier Miakinen a écrit (wrote) :

Mébon, je l'ai peut-être simplement lu
dans la doc.



Ah ouais, mais si tu lias 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.

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).



Je sans que ça va être un plaisir à lire, ce groupe :-)

Manuel.
Avatar
SAM
Le 1/11/09 11:13 PM, Olivier Miakinen a écrit :
Salut !



de même,

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".



et hop! le 'm' a disparu ! :-(
Je trouve ça balot.
On n'en veut pas dans la partie capturée OK,
mais ce n'est pas pour ça qu'on n'en veut plus dans la partie restée en
plan (cas du replace)

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.



Je continue de mon côté à dire que si, ça fait qque chose :
on capture le truc et on le jette.
Ce sont des parenthèses jetantes (et non pas non capturantes)

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.



Si on ne cherche qu'une extraction/repérage de la partie suivante, probable.
Là où ça merdoie c'est pour le replace() (où la parie conservée reste
estropiée)

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à !



c a d que là je ne me serais pas cassé le tronc , hop! :
javascript:'Martin::Dupont::Durand
Martin--Dupont--Durand'.replace(/::|--/g,' ');
ou :
javascript:'Martin::Dupont::Durand
Martin--Dupont--Durand'.replace(/[:-]+/g,' ');

d'autant que, théoriquement, je ne sais pas d'avance combien de $n je
vais récupérer.
(sinon j'ai plus vite fait à la main pour 2 ou 3 items ;-) )


---------------------------------------------------------------------

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"



Tu vois même là on(je?) pense à l'envers !
Pour moi il ne reste que la dernière.

D'ailleurs mon soft d'analyse de RegExp (Reggy pour Mac) est bien
d'accord, 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 ?

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).



Orange n'a pas l'air d'être au parfum,
je tente chez Free (c'est OK).

--
sm
Avatar
Olivier Miakinen
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

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 ». En tout cas rien
d'autre que ne pas mettre de parenthèses du tout (dans tous les cas où
c'est possible). Et c'est le seul moyen, quand on ne peut pas se passer
des parenthèses, pour empêcher qu'elles définissent un « subpattern ».
Avatar
Olivier Miakinen
Le 12/01/2009 02:09, mpg a écrit :



Ah ouais, mais si tu lis les docs, c'est pas du jeu ;-)



:-D

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.



Moi non plus : je viens de le découvrir en forgeant mon exemple. ;-)

Je sens que ça va être un plaisir à lire, ce groupe :-)



Oui !
Avatar
SAM
Le 1/12/09 2:28 AM, SAM a écrit :

ne valide les 2 1ières ligne l'expression :
/the (red|white) king and the 1 queen/
(de même que ma "démo" !)



démo modifiée avec les royaumes :
<http://stephane.moriaux.pagesperso-orange.fr/truc/js_regexp_testeur>

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 ?



en standby

--
sm
Avatar
SAM
Le 1/12/09 2:31 AM, Olivier Miakinen a écrit :
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



Tu peux bien faire ce que tu veux, si c'est *non* capturant
yaka le laisser à sa place.
Je ne sors pas de là.
(bon il me faudra bien finir par capter, mais .....)

(?: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



Voilà, et *je* veux la 2ième

Ç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.



??? cette fois je non capture l'éponge !

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".



Oui mais puisque *moi* je voulais comprendre que ça prenait 'uche' quoi !

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 ».



Je vais non capturer l'eau du bain avec l'éponge !

--
sm
Avatar
Pierre Goiffon
mpg wrote:
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 :-)



Et hop, abonné. Super !
1 2 3 4 5