Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Question] RegExp : accéder aux parenthèse capturentes

Avec un tableau ou autre ?

Sujet résolu
    12 novembre 2011 à 17:45:51

    Bonjour !!
    J'ai une petite question : comment accéder au contenu des parenthèse capturantes d'une RegExp ?

    un petit code exemple :
    var text = /(\d{1,5})/; // 1 à 5 nombres
    var Regx = MaChaine.match(text);
    


    Donc voila, comment faire ?
    Regx[0] ??

    seconde question ;):p

    Imaginons que, dans le code ci-dessus, il y ai plusieurs fois des nombres de 1 a 5, comment accéder a chacun d'eux ?
    Comme ci-dessous ?
    for (var i = 0; i < Regx[0].length; i++) {
    Regx[0][i]
    }
    


    Merci a vous ;)
    • Partager sur Facebook
    • Partager sur Twitter

    Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

      12 novembre 2011 à 19:30:59

      Il te faut faire une boucle.

      Tu as un exemple sur MDN :
      https://developer.mozilla.org/en/JavaS [...] s/RegExp/exec


      var myRe = /ab*/g;  
          var str = "abbcdefabh";  
          var myArray;  
          while ((myArray = myRe.exec(str)) != null)  
          {  
            var msg = "Found " + myArray[0] + ".  ";  
            msg += "Next match starts at " + myRe.lastIndex;  
            print(msg);  
          }
      
      • Partager sur Facebook
      • Partager sur Twitter
        12 novembre 2011 à 20:36:17

        Citation : Tiller

        Il te faut faire une boucle.

        Tu as un exemple sur MDN :
        https://developer.mozilla.org/en/JavaS [...] s/RegExp/exec


        javascript:
        var myRe = /ab*/g;  
            var str = "abbcdefabh";  
            var myArray;  
            while ((myArray = myRe.exec(str)) != null)  
            {  
              var msg = "Found " + myArray[0] + ".  ";  
              msg += "Next match starts at " + myRe.lastIndex;  
              alert(msg);  
            }
        


        Euh, je ne crois pas que c'est ce que je recherche :/

        Je vais te donner un code, ce sera peut être plus compréhensible !
        var production_table = document.getElementById('production_table');
        var Regx = /(\(\d\d\d\|\d\d\d\)) (C\d\d)/;
        	var searchRegx = production_table.innerHTML.match(Regx);
        	var coords = searchRegx.$1;
        	var conts = searchRegx.$2;
        	var NbVill = production_table.innerHTML.match(/Village (\(\d\))/);
        	var input_one = production_table.getElementsByTagName('input');
        		for (var l = 0; l < input_one.length; l++)	{
        			if (input_one[l].id.indexOf('edit_input') != -1)	{
        				for (var j = 0; j < NbVill.$1; j++)		{
        					input_one[l].value = coords[j];
        				}
        			}
        		};
        


        Je cherche a capturer plusieurs chaines de caractères dans la page qui ont cette forme : (000|000)
        ensuite, j'accède a des inputs de type texte pour remplacer leur valeur par la regexp !
        Et ... ça ne fonctionne pas :(
        • Partager sur Facebook
        • Partager sur Twitter

        Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

          14 novembre 2011 à 18:23:39

          Up ...
          • Partager sur Facebook
          • Partager sur Twitter

          Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

            15 novembre 2011 à 11:32:22

            1. Le caractère | en regex est une caractère spécial, donc si tu le veux en tant que chaine, tu dois mettre \|
            2. Ensuite, donne moi un exemple de chaine de départ (càd production_table.innerHTML). Il n'y a qu'une fois (000|000) ou plusieurs fois ?
            • Partager sur Facebook
            • Partager sur Twitter
              15 novembre 2011 à 14:54:19

              Effectivement, j'ai eu tellement de caractères a échapper que j'ai oublier celui ci !

              Je cherche la chaine dans production_table.innerHTML (je pourrais la chercher dans production_table.textContent)

              Oui j'ai plusieurs la chaine recherchée, exemple :

              (000|000) C00
              (111|111) C11
              (355|467) C78

              Je pourrais les peut être les séparées en deux variable :

              var chaine1 = (000|000);
              var chaine2 = C00;
              /*j'ai mis les chaines comme ça pour l'exemple, c'est plus simple*/
              


              Mais il me faudrait toujours accéder aux parenthèses capturentes + les indices suivant, donc ça revient au même :

              maRegExp[0][0]
              • Partager sur Facebook
              • Partager sur Twitter

              Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

              Anonyme
                15 novembre 2011 à 15:27:42

                Le meilleur moyen pour accéder aux parenthèses «capturantes» d'une expression régulière consiste à utiliser la fonction replace avec une fonction anomyme. Par exemple, avec la date 2011-11-15 et l'expression régulière /(\d\d\d\d)-(\d\d)-(\d\d)/, on va pouvoir disposer en arguments de la fonction du motif capturé dans son intégralité, puis des 3 parenthèses «capturantes» suivantes...

                var chnDte="nous sommes le 2011-11-15";
                var chnEnClair=chnDte.replace(/(\d\d\d\d)-(\d\d)-(\d\d)/,function(a,b,c,d){
                   alert('le tout : '+a+'\nun : '+b+'\ndeux : '+c+'\ntrois : '+d)
                   return parseInt(d,10)+' '+'janvier,février,mars,avril,main,juin,juillet,août,septembre,octobre,novembre,décembre'.split(/,/g)[parseInt(c,10)-1]+' '+b;}); 
                alert(chnEnClair);
                

                La méthode est très pratique, elle peut même être détournée en ne retournant rien (pas de remplacement) mais en affectant des valeurs à des variables prédéfinies...
                Je vous laisse le soin d'en tirer parti avec l'expression /(\(\d\d\d\|\d\d\d\)) (C\d\d)/;
                • Partager sur Facebook
                • Partager sur Twitter
                  15 novembre 2011 à 15:48:55

                  Euh, a,b,c,d, je ne comprends pas bien d'où ils viennent o_O

                  Dans mon cas, je dois mettre les chaines dans des inputs de type texte, je ne sais pas si ça peut fonctionner !

                  je dois mettre les chaines dans des inputs exemple :

                  (000|000) devra aller dans input[0]
                  (145|045) devra aller dans input[1]
                  etc ...
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

                  Anonyme
                    15 novembre 2011 à 16:00:44

                    Les a,b,c,d sont donnés par le système, un peu comme le e dans les «event listeners»... Voir cette page de MDN. Cela fonctionne sur tous les navigateurs récents.
                    Je ne comprend pas comment l'on déduit les numéros des inputs. Serait-ce simplement l'ordre des captures ?
                    Puis-je avoir un extrait du code dans lequel se trouvent les codes à extraire ?

                    Edit : le nombre des arguments dépend évidement du nombre de parenthèses «capturantes». le système donne même deux arguments supplémentaires (la position de la capture et la chaîne intégrale)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 novembre 2011 à 17:36:03

                      var myRe = /(\(\d\d\d\|\d\d\d\)) (C\d\d)/g,
                          str = production_table.innerHTML,
                          res,
                          i = 0;
                      
                      while ((res = myRe.exec(str)) != null) {
                      	i++;
                      	document.getElementById('input_que_tu_veux_numero_' + i).value = res[1]; // (000|000)
                      	document.getElementById('un_autre_input_que_tu_veux_numero_' + i).value = res[2]; // C00
                      }
                      


                      Sinon voila, sans détourner l'usage premier de replace.


                      Et je tiens à rappeler encore une fois :
                      1. Le signe | est un opérateur des RegEx, il faut donc l'échapper avec \
                      2. Les parenthèses étant également des opérateurs, si tu veux capturer les parenthèses, tu dois mettre (\(...\))

                      Edit: J'ai corrigé le "g" manquant.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 novembre 2011 à 17:52:54

                        Puisque j'ai plusieurs (000|000) différent, le code ne va pas seulement retourner le premier dans tout les inputs ?

                        Merci ;)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

                        Anonyme
                          16 novembre 2011 à 13:34:21

                          Variante, sans while...

                          var  cnt = production_table.innerHTML,nosInp=0;
                          cnt.replace(/(\(\d\d\d\|\d\d\d\)) (C\d\d)/g,function(a,b){
                          	document.getElementById('input_que_tu_veux_numero_' + nosInp++).value = b;
                          })
                          

                          L’essayer c’est l’adopter !
                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 novembre 2011 à 15:48:52

                            J'approche au but, merci a vous deux mais j'ai choisis le code de Tiller :

                            Ce n'est pas que je n'aime pas ton code 007Julien, mais je préfère utiliser ce que je comprends pour l'instant, plus tard je passerais a autre chose peut être ;)

                            Et donc, j'ai dis J'approche car j'avais raison, les inputs contiennent seulement la première chaine retournée par la regexp !

                            Voici le code que j'ai modifié :

                            var production_table = document.getElementById('production_table');
                            var myRe = /(\(\d\d\d\|\d\d\d\)) (C\d\d)/,
                                page = production_table.innerHTML,
                                result = myRe.exec(page);
                            var inputs = production_table.getElementsByTagName('input');
                            		for (var l = 0; l < inputs.length; l++)	{
                            			if (inputs[l].id.indexOf('edit_input') != -1)	{
                            	inputs[l].value = result[1]; /* (000|000) */
                            	/*inputs[l].value = result[2]; // C00*/
                            			}
                            		};
                            void(0);
                            


                            Sinon c'est parfait ;)
                            Note : j'ai mis entre commentaires quelques ligne car c'est principalement la chaine (000|000) qui m'intéresse, une fois que j'aurais résolu le problème je passerais a C00

                            Note2 : je pourrais rallonger le code, en faisant, au premier click, un numérotage des inputs, ex :

                            001 (000|000) C00
                            002 (000|000) C00

                            et au second click, j'enlève les numéros
                            Vous allez vous dire "Mais si tu numérotes, il y a déjà les coordonnées ?"
                            et bien en faite les coordonnées ne sont pas dans la chaine mais a coté, donc ça reviendrais a remplir les inputs comme ceci :

                            001
                            002

                            Si on ne trouve pas de solution, je ferais la Note2, ce qui est dommage car ce cas peut être fréquent et la Note2 ne sera pas toujours applicable
                            (quand je dis "ce cas", je fais allusion a la recherche de chaine dans une page au moyen d'une regexp, et donc retourner par exemple dans des inputs les résultats trouvés 1 par 1)

                            Merci !!
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

                              16 novembre 2011 à 18:34:18

                              Alors, étant absolument persuadé de la validité de mon code et de la non validité du tien, j'ai testé mon code, et effectivement il y a le bug que tu as dit, et je m'en excuse :]

                              Cependant, ce n'est pas la logique qui est fausse loin de là. C'était seulement une petite lettre "g" oubliée après la regex.

                              Donc je re-poste :
                              var myRe = /(\(\d\d\d\|\d\d\d\)) (C\d\d)/g,
                                  str = production_table.innerHTML,
                                  res,
                                  i = 0;
                              
                              while ((res = myRe.exec(str)) != null) {
                              	i++;
                              	document.getElementById('input_que_tu_veux_numero_' + i).value = res[1]; // (000|000)
                              	document.getElementById('un_autre_input_que_tu_veux_numero_' + i).value = res[2]; // C00
                              }
                              


                              Et je signe :
                              http://stooit.com/explorerUpload/testregex.htm

                              Je suis a peu-près sûr que le code que tu as montré ne marche pas.

                              Et surtout, où est l'intérêt de ton void(0) ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                17 novembre 2011 à 18:07:38

                                Si je ne mets pas void(0); le code de la page s'efface et il y a écrit un truc du genre [Objet]

                                Je vais tester str.match(/RegExp/g), en faite c'est bien le le flag g qui me manquait je pense, merci !!
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

                                  17 novembre 2011 à 20:06:12

                                  Je le redis pour la n-ième fois :
                                  Tu n'as pas accès aux parenthèses capturantes de chaque correspondance avec match. Tu dois faire une boucle avec exec~

                                  Edited~
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    17 novembre 2011 à 21:32:25

                                    Extrait de l'aide javascript
                                    Match , méthode

                                    Renvoie, sous forme de tableau, les résultats d'une recherche sur une chaîne au moyen d'un objet Regular Expression qui lui est fourni.
                                    La méthode match, qui se comporte comme la méthode exec, renvoie un tableau de valeurs. L'élément zéro du tableau contient les derniers caractères retenus. Les éléments 1...n contiennent les correspondances des sous-chaînes entre parenthèses dans l'expression régulière.
                                    La méthode met à jour le contenu de l'objet RegExp.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      17 novembre 2011 à 22:51:40

                                      Tu connais une définition, super.

                                      Moi je connais la fonctionnalité :

                                      var a = '123a 456b 789c';
                                      var r = /(\d\d\d)(\w)/g;
                                      
                                      console.log(a.match(r));
                                      // ['123a', '456b', '789c']
                                      


                                      Tu me dis où tu vois les parenthèses capturantes là.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        17 novembre 2011 à 23:10:56

                                        Citation : 007Julien

                                        Extrait de l'aide javascript
                                        Match , méthode

                                        Renvoie, sous forme de tableau, les résultats d'une recherche sur une chaîne au moyen d'un objet Regular Expression qui lui est fourni.
                                        La méthode match, qui se comporte comme la méthode exec, renvoie un tableau de valeurs. L'élément zéro du tableau contient les derniers caractères retenus. Les éléments 1...n contiennent les correspondances des sous-chaînes entre parenthèses dans l'expression régulière.
                                        La méthode met à jour le contenu de l'objet RegExp.



                                        Extrait du livre JavaScript, The Definitive Guide (et maladroitement traduit par mes soins) :

                                        Citation

                                        Synopsis


                                        string.match(regexp)

                                        Paramètres


                                        regexp
                                        Un objet RegExp qui indique le motif à rechercher. Si ce paramètre n'est pas une RegExp, il est d'abord converti en le passant au constructeur RegExp().

                                        Return


                                        Un tableau contenant le résultat de la recherche. Le contenu du tableau dépend de la présence de l'attribut "g" global de regexp. Les détails du retour sont donnés dans la description.

                                        Description


                                        match() recherche dans string une ou plusieurs occurrences de regexp. Le comportement de cette méthode diffère selon si regexp possède l'attribut "g" ou non. Si regexp n'a pas l'attribut "g", match() recherche dans string une unique occurrence de regexp. Si aucune n'est trouvée, match() retourne null. Sinon, elle retourne un tableau contenant des informations sur l'occurrence trouvée. L'élément 0 du tableau contient le texte trouvé. Les éléments restants contiennent le texte correctement aux sous-expressions éventuelles entre parathèses dans l'expression régulière. En plus de ces éléments, le tableau retourné a également deux propriétés. La propriété index du tableau indique la position dans string à laquelle début l'occurrence trouvée. De plus, la propriété input du tableau retourné est une référence à string.

                                        Si regexp a le drapeau "g", match() effectue une recherche globale. La méthode retourne null si aucune occurrence n'est trouvée, et retourne un tableau si une ou plusieurs occurrences sont trouvées. Le contenu du tableau retourné est relativement différent lors des recherches globales, cependant. Dans ce cas, les éléments du tableau contiennent chacune des sous-chaînes spécifiées par regexp. Le tableau retourné n'a pas de propriété index ou input. Noter que pour les recherches globales, match() ne fournit pas d'informations concernant les sous-expressions entre parenthèses dans regexp, et n'indique pas non plus la position dans string à laquelle chaque occurrence apparaît. Pour obtenir ces informations lors d'une recherche globale, utiliser RegExp.exec().

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 novembre 2011 à 18:48:53

                                          Je suis perdu moi dans tout ça, que dois-je faire ?
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

                                            18 novembre 2011 à 21:06:07

                                            J'ai réussis, c'est (presque) parfait (il reste quelques réglages) mais j'ai du séparer les deux RegExp :

                                            var coords = true,
                                            	cont = true;
                                            var production_table = document.getElementById('production_table');
                                            var myReCoords = /(\(\d\d\d\|\d\d\d\))/g,
                                            	myReCont = /(C\d\d)/g,
                                                resultCoords = production_table.innerHTML.match(myReCoords),
                                            	resultCont = production_table.innerHTML.match(myReCont),
                                            	i = 0;
                                            var inputs = production_table.getElementsByTagName('input');
                                            		for (var l = 0; l < inputs.length; l++)	{
                                            			if (inputs[l].id.indexOf('edit_input') != -1)	{
                                            				if (coords == true && cont == true)	{
                                            					inputs[l].value = resultCoords[i++] + " " + resultCont[i]; /* (000|000) */
                                            				}
                                            				else if (coords == true && cont == false)	{
                                            					inputs[l].value = resultCoords[i++]; /* (000|000) */
                                            
                                            				}
                                            				else if (coords == false && cont == true)	{
                                            					inputs[l].value = resultCont[i++]; /* C00*/
                                            				}
                                            			}
                                            		};
                                            void(0);
                                            


                                            Pas besoin de boucle while, j'incrémente i quand il le faut;
                                            pour les conditions j'ai rajouté du code inutile (== true et == false) : c'est un choix, c'est pour la compréhension du code, ça m'aide ici :p

                                            Merci a tous ceux qui m'ont aidé !
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

                                              18 novembre 2011 à 21:08:19

                                              La prochaine fois que tu comptes ne pas écouter, préviens dès le début, histoire que je ne me casse par le c** à essayer de faire comprendre.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                19 novembre 2011 à 9:48:52

                                                Si, mon but est d'apprendre au plus, mais ta technique ne fonctionnait pas dans mon cas :

                                                - Les chaines recherchés n'étaient pas une textarea mais dans tout la partie du document concerné.
                                                - Les inputs n'ont pas d'id, j'ai du utiliser un tableau ...

                                                J'avoue n'avoir peut être pas donné assez de précisions ...

                                                Je précise que tu m'as quand même aidé, mon code ne c'est pas fait tout seul !
                                                Je remercie donc ceux qui m'ont aidé, et ... c'est tout :)
                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

                                                  19 novembre 2011 à 12:00:04

                                                  var coords = true,
                                                      cont = true,
                                                      production_table = document.getElementById('production_table'),
                                                      myReg = /(\(\d\d\d\|\d\d\d\)) (C\d\d)/g,
                                                      i = 0,
                                                      res,
                                                      inputs = production_table.getElementsByTagName('input');
                                                  
                                                  	for (var l = 0; l < inputs.length; l++)	{
                                                  		if (inputs[l].id.indexOf('edit_input') != -1)	{
                                                  			res = myReg.exec(production_table);
                                                  			
                                                  			if (res != null) {
                                                  				if (coords == true && cont == true)	{
                                                  					inputs[l].value = res[1] + " " + res[2]; /* (000|000) */
                                                  				}
                                                  				else if (coords == true && cont == false)	{
                                                  					inputs[l].value = res[1]; /* (000|000) */
                                                  	
                                                  				}
                                                  				else if (coords == false && cont == true)	{
                                                  					inputs[l].value = res[2]; /* C00*/
                                                  				}
                                                  			}
                                                  		}
                                                  	};
                                                  	
                                                  void(0);
                                                  
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    19 novembre 2011 à 12:20:14

                                                    Désoler j'ai oublié de vous montrer mon code, il est similaire au tien Tiller (aussi désoler si je t'ai fais perdre du temps) :

                                                    var input_one = production_table.getElementsByTagName('input');
                                                    		for (var h = 0; h < input_one.length; h++)	{
                                                    			if (input_one[h].id.indexOf('edit_input') != -1)	{
                                                    				inputs.push(input_one[h]);
                                                    				}
                                                    		}
                                                    		for (var l = 0; l < inputs.length; l++)	{
                                                    				if (coords == true && cont == true)	{
                                                    					inputs[l].value = resultCoords[i++] + " " + resultCont[j++]; /* (000|000) et C00*/
                                                    				}
                                                    				else if (coords == true && cont == false)	{
                                                    					inputs[l].value = resultCoords[i++]; /* (000|000) */
                                                    
                                                    				}
                                                    				else if (coords == false && cont == true)	{
                                                    					inputs[l].value = resultCont[i++]; /* C00*/
                                                    				}
                                                    					
                                                    		};
                                                    void(0);
                                                    


                                                    Je l'ai aussi fais avec des ternaires :

                                                    javascript:
                                                    var coords = true,
                                                    	cont = true;
                                                    var production_table = document.getElementById('production_table');
                                                    var myReCoords = /(\(\d\d\d\|\d\d\d\))/g,
                                                    	myReCont = /(C\d\d)/g,
                                                        resultCoords = production_table.innerHTML.match(myReCoords),
                                                    	resultCont = production_table.innerHTML.match(myReCont),
                                                    	i = 0, j = 0;
                                                    var inputs = production_table.getElementsByTagName('input');
                                                    		for (var l = 0; l < inputs.length; l++)	{
                                                    			if (inputs[l].id.indexOf('edit_input') != -1)	{
                                                    				var tern1 = coords ? resultCoords[i++] + " " : "";
                                                    				var tern2 = cont ? resultCont[j++] : "";
                                                    				inputs[l].value = tern1 + tern2;
                                                    			}
                                                    		};
                                                    void(0);
                                                    

                                                    Mais je ne pense pas prendre ce code, car j'ajoute maintenant du code assez long (qui d'ailleurs ne fonctionne pas pour l'instant, mais je vais essayer de trouver moi-même pour ne pas trop vous embêter :p )
                                                    voila un avant-goût (je vous montrerais le final plus tard) :

                                                    if (contName == true)	{
                                                    				for (var k = 0; k < resultCont.length; k++)	{
                                                    					if (resultCont[k] == "C0"||"C1"||"C2"||"C3"||"C4"||"C10"||"C11"||"C12"||"C13"||"C14"||"C20"||"C21"||"C22"||"C23"||"C24"||"C30"||"C31"||"C32"||"C33"||"C34"||"C40"||"C41"||"C42"||"C43"||"C44")	{
                                                    						contsnames[k] = "nord-ouest";
                                                    					}
                                                    					else if (resultCont[k] == "C5"||"C6"||"C7"||"C8"||"C9"||"C15"||"C16"||"C17"||"C18"||"C19"||"C25"||"C26"||"C27"||"C28"||"C29"||"C35"||"C36"||"C37"||"C38"||"C39"||"C45"||"C46"||"C47"||"C48"||"C49")	{
                                                    						contsnames[k] = "nord-est";
                                                    					}
                                                    					else if (resultCont[k] == "C50"||"C51"||"C52"||"C53"||"C54"||"C60"||"C61"||"C62"||"C63"||"C64"||"C70"||"C71"||"C72"||"C73"||"C74"||"C80"||"C81"||"C82"||"C83"||"C84"||"C90"||"C91"||"C92"||"C93"||"C94")	{
                                                    						contsnames[k] = "sud-ouest";
                                                    					}	
                                                    					else if (resultCont[k] == "C55"||"C56"||"C57"||"C58"||"C59"||"C65"||"C66"||"C67"||"C68"||"C69"||"C75"||"C76"||"C77"||"C78"||"C79"||"C85"||"C86"||"C87"||"C88"||"C89"||"C95"||"C96"||"C97"||"C98"||"C99")	{
                                                    						contsnames[k] = "sud-est";
                                                    					}	
                                                    				}
                                                    				inputs[l].value += " " + contsnames[m++];
                                                    			}
                                                    


                                                    Tu as remarqué que j'ai repris le "squelette" des codes que tu m'as donné précédemment ;)
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

                                                      19 novembre 2011 à 12:23:29

                                                      Le seul truc que je remarque, c'est que la question était :

                                                      Citation

                                                      J'ai une petite question : comment accéder au contenu des parenthèse capturantes d'une RegExp ?



                                                      Et que maintenant tu n'y accèdes plus, tu as divisé en plusieurs regex.

                                                      M'enfin bon, c'pas grave.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        19 novembre 2011 à 12:26:48

                                                        Oui effectivement, si je n'arrive pas après une trop longue durée j'essaye de contourner le problème ;) (je suis découragé de ne pas trouver la réponse que je cherche)
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

                                                          27 novembre 2011 à 11:32:33

                                                          J'ai oublié de vous montrer le code final ^^

                                                          var coords = true;
                                                          var cont = true;
                                                          var nameContinent = true;
                                                          
                                                          var production_table = document.getElementById('production_table'),
                                                          	resultCoords = production_table.innerHTML.match(/(\(\d\d\d\|\d\d\d\))/g),
                                                          	resultCont = production_table.innerHTML.match(/(C\d\d)/g),
                                                          	i = 0, j = 0, k, l, m = 0,
                                                          	contsnames = [], inputs = [],
                                                          	inputs = production_table.getElementsByTagName('input');
                                                          for (var l = 0; l < inputs.length; l++)	{
                                                          	if (inputs[l].id.indexOf('edit_input') != -1)	{
                                                          		if (nameContinent)	{
                                                          			for (k = 0; k < resultCont.length; k++)	{
                                                          				SwitchCondition();
                                                          			}
                                                          		}
                                                          		var tern1 = coords ? resultCoords[i++] : "",
                                                          			tern2 = cont ? resultCont[j++] : "",
                                                          			tern3 = nameContinent ? contsnames[m++] : "",
                                                          			espace = tern1 ? " " : "",
                                                          			esp2 = coords || cont ? " " : "";
                                                          		inputs[l].value = tern1 + espace + tern2 + esp2 + tern3 ;
                                                          	}
                                                          };
                                                          function SwitchCondition(){switch (resultCont[k]){
                                                          case "C1":case "C2":case "C3":case "C4":case "C10":case "C11":case "C12":case "C13":case "C14":case "C20":case "C21":case "C22":case "C23":case "C24":case "C30":case "C31":case "C32":case "C33":case "C34":case "C40":case "C41":case "C42":case "C43":case "C44":
                                                          contsnames[k] = "Nord-Ouest";break;
                                                          case "C6":case "C7":case "C8":case "C9":case "C15":case "C16":case "C17":case "C18":case "C19":case "C25":case "C26":case "C27":case "C28":case "C29":case "C35":case "C36":case "C37":case "C38":case "C39":case "C45":case "C46":case "C47":case "C48":case "C49":
                                                          contsnames[k] = "Nord-Ouest";break;
                                                          case "C51":case "C52":case "C53":case "C54":case "C60":case "C61":case "C62":case "C63":case "C64":case "C70":case "C71":case "C72":case "C73":case "C74":case "C80":case "C81":case "C82":case "C83":case "C84":case "C90":case "C91":case "C92":case "C93":case "C94":
                                                          contsnames[k] = "Sud-Ouest";break;
                                                          case "C55":case "C56":case "C57":case "C58":case "C59":case "C65":case "C66":case "C67":case "C68":case "C69":case "C75":case "C76":case "C77":case "C78":case "C79":case "C85":case "C86":case "C87":case "C88":case "C89":case "C95":case "C96":case "C97":case "C98":case "C99":
                                                          contsnames[k] = "Sud-Est";break;}};
                                                          void(0);
                                                          


                                                          J'ai finalement choisit les ternaires, c'est plus pratique et tout de même lisible ;)
                                                          Merci de votre aide !!
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

                                                          [Question] RegExp : accéder aux parenthèse capturentes

                                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                          • Editeur
                                                          • Markdown