JS:étrange résultats regex pour traiter les erreurs

JS:étrange résultats regex pour traiter les erreurs - HTML/CSS - Programmation

Marsh Posté le 28-01-2014 à 17:00:19    

Bonjour j'ouvre ce post car je ne cerne pas bien le fonctionnement des regex en javascript
Je teste une fonction de traitement des erreurs, afin d'exclure les erreurs d'origine externe ..

 

Avec:

Code :
  1. var x="[3@ReferenceError:.Components.is.not.defined:resource://5657_socnet/api-utils/lib/cuddlefish.js.->.resource://5657_socnet/api-utils/lib/content/worker.js.->.resource://5657_socnet/api-utils/data/content-proxy.js]: 2£[3@ReferenceError:.Components.is.not.defined:resource://5657_socnet/api-utils/lib/cuddlefish.js.->.resource://5657_socnet/api-utils/lib/content/worker.js.->.resource://5657_socnet/api-utils/data/content-proxy.js]: 2£[@Script.error.:force-download.net/lib/plugin/1/do.js.phpi693804033-51387561-351482385-287123930-546380643-173500334-964834664]: 1£3@ReferenceError:.Components.is.not.defined:resource://5657_socnet/api-utils/lib/cuddlefish.js.->.resource://5657_socnet/api-utils/lib/content/worker.js.->.resource://5657_socnet/api-utils/data/content-proxy.js£[@ [object Event ]:]:£[@Script.error.:]:".split('£'),
  2. R=/resource:\/|edgecastcdn|force-download|-download|a\.curCSS|EfGoogleTracking|pop\.shpath\.net|browse\.phpu|injectScripts|superfish|websitelogon|Christmas|json|termin|racking|analytics|-dating|syndicatio|truncated|error|\.jpg/gi;
  3. for(var i in x){v=x[i];//v=v.replace(/@|\[|\]/gi,'');
  4.   REG=R.exec(v);console.log(v,REG);
  5. }


Notez que 1,2 et 4 sont les résultats issus de la même chaine ...
L'on voit sur la même chaine, la première fois, il voit "error", puis "resource:/", mais ne voit pas le "download" sur la 3ème, et à nouveau "error" sur la quatrième
     >>> capture écran console

 

Du coup, je suis un peu perdu pourquoi il ne voit pas "-download" sur la 3ème, et pourquoi les résultats diffèrent sur la même chaine..

 

Merci pour vos lumières  :jap:


Message édité par grosbin le 28-01-2014 à 17:01:51

---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 28-01-2014 à 17:00:19   

Reply

Marsh Posté le 29-01-2014 à 14:38:57    

À part le mot "bug" je ne vois pas...
 
Comme ceci ça fonctionne (je te mets un exemple car je ne sais pas si tu as bien compris que là tu ne récupères que la dernière occurrence)  :
 

Code :
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.   <title>Page d'essai</title>
  5.   <style type="text/css">
  6.   </style>
  7.   <script type="text/javascript">
  8.    function go() {
  9.     var x = "[3@ReferenceError:.Components.is.not.defined:resource://5657_socnet/api-utils/lib/cuddlefish.js.->.resource://5657_socnet/api-utils/lib/content/worker.js.->.resource://5657_socnet/api-utils/data/content-proxy.js]: 2£[3@ReferenceError:.Components.is.not.defined:resource://5657_socnet/api-utils/lib/cuddlefish.js.->.resource://5657_socnet/api-utils/lib/content/worker.js.->.resource://5657_socnet/api-utils/data/content-proxy.js]: 2£[@Script.error.:force-download.net/lib/plugin/1/do.js.phpi693804033-51387561-351482385-287123930-546380643-173500334-964834664]: 1£[3@ReferenceError:.Components.is.not.defined:resource://5657_socnet/api-utils/lib/cuddlefish.js.->.resource://5657_socnet/api-utils/lib/content/worker.js.->.resource://5657_socnet/api-utils/data/content-proxy.js]£[@ [object Event ]:]:£[@Script.error.:]:".split('£');
  10.     for(var i in x){
  11.      document.write("<b>Ligne "+i+":</b><br>"+x[i]+"<br><br>" );
  12.     }
  13.    document.write("<br>#########<b> RÉSULTAT </b>#########<br><br>" );
  14.    stk = "";
  15.    tab = new Array();
  16.    tab[0] = "<u>les derniers caractères trouvés :</u> ";
  17.    tab["index"] = "<u>position de départ :</u> ";
  18.    tab["input"] = "<u>input :</u> ";
  19.     for(var j in x){
  20.      REG = /resource:\/|edgecastcdn|force-download|-download|a\.curCSS|EfGoogleTracking|pop\.shpath\.net|browse\.phpu|injectScripts|superfish|websitelogon|Christmas|json|termin|racking|analytics|-dating|syndicatio|truncated|error|\.jpg/gi.exec(x[j]);
  21.      for(var k in REG){
  22.       stk = stk+tab[k]+REG[k]+"<br>";
  23.      }
  24.      document.write("<b>Ligne "+j+" :</b><br>"+stk+"<br>" );
  25.      stk = "";
  26.     }
  27.    }
  28.   </script>
  29. </head>
  30. <body onLoad="go();">
  31. </body>
  32. </html>


 
Dans ce cas ça fonctionne car je n'ai pas définit le regex dans une variable, si je le mets dans une variable ça déconne, aucune idée du pourquoi.


Message édité par MaybeEijOrNot le 29-01-2014 à 14:42:34
Reply

Marsh Posté le 29-01-2014 à 15:13:29    

Hé bien, simplement le flag "g" à retirer et cela fonctionne à merveille
 
Si j'utilisait un replace, je pense que ce flag serait utile à retirer toutes les occurences, à tester


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 29-01-2014 à 15:42:27    

Ben il serait utile si tu utilisais des parenthèses dans ton regex.
 
 
EDIT : autrement si tu veux tester des regex il y a plusieurs sites qui proposent de le faire, tu tapes "tester regex javascript" (ou un équivalent en anglais) sur google et tu devrais trouver des choses.


Message édité par MaybeEijOrNot le 29-01-2014 à 15:44:19
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed