Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 15/03/2017, à 16:13

slash-z

[résolu] [javascript] bug expressions régulières

sous Firefox 51.0.1 (32 bits):

<html><head></head><body>
<script type="text/javascript">

document.writeln("en utilisant le type primitif" + "<br><br>");

/^(CHICAGO)$/.exec("CHICAGO");
var capture1 = RegExp.$1;
document.writeln("capture 1 = " + capture1 + "<br>");

RegExp.$1 = "ROME"; // ne fonctionne pas

/^(PARIS)$/.exec("LONDRES");
var capture2 = RegExp.$1;
document.writeln("capture 2 = " + capture2 + "<br>");



document.writeln("<br><br><br>en utilisant new" + "<br><br>");

new RegExp("^(MOSCOU)$", "").exec("MOSCOU");
capture3 = RegExp.$1;

document.writeln("capture 3 = " + capture3 + "<br>");

new RegExp("^(PARIS)$", "").exec("LONDON");
capture4 = RegExp.$1;

document.writeln("capture 4 = " + capture4 + "<br>");

</script>
</body></html>

RESULTAT:

en utilisant le type primitif

capture 1 = CHICAGO
capture 2 = CHICAGO



en utilisant new

capture 3 = MOSCOU
capture 4 = MOSCOU

J'ai mis un moment à trouver d'où venait le bug observé dans un de mes scripts. (et encore j'ai eu de la chance de l'avoir observé !!! pour pouvoir le contourner)

Je trouve ça assez pervert.
Connaissez-vous une syntaxe un moyen de remettre à null l'attribut $1 ?



PS:
A noter que le code suivant ne fonctionne pas sans que je comprenne pourquoi:

<html><head></head><body>
<script type="text/javascript">

var toto = new RegExp("^(MOSCOU)$", "");
toto.exec("MOSCOU");
var capture5 = toto.$1;

document.writeln("capture 5 = " + capture5 + "<br>");
</script>
</body></html>

RSULTAT:
capture 5 = undefined

Dernière modification par slash-z (Le 17/03/2017, à 12:26)


Z comme zorro..... ou zobi, selon. Avec un slash devant parce que je m'appelle pas bilou.

Hors ligne

#2 Le 15/03/2017, à 20:25

soshy

Re : [résolu] [javascript] bug expressions régulières

Salut,

PS:
A noter que le code suivant ne fonctionne pas sans que je comprenne pourquoi:

Voir la doc ici.
1 -
Les propriétés $1, ..., $9 sont des propriétés statiques. Ce ne sont pas des propriétés rattachées à une expression rationnelle donnée. Pour cette raison, on utilisera toujours la syntaxe RegExp.$1, ..., RegExp.$9.
Donc en gros ceci n'a aucun sens (la subtilité vient du "statique"):

var toto = new RegExp("^(MOSCOU)$", "");
toto.exec("MOSCOU");
var capture5 = toto.$1;

Il faut remplacer par:

var toto = new RegExp("^(MOSCOU)$", "");
toto.exec("MOSCOU");
var capture5 = RegExp.$1;

2- Et c'est probablement plus important:
Cette fonctionnalité n'est ni standard, ni en voie de standardisation. Ne l'utilisez pas pour des sites accessibles sur le Web : elle ne fonctionnera pas pour tout utilisateur. Il peut également y avoir d'importantes incompatibilités entre les implémentations et son comportement peut être modifié dans le futur.


Maintenant si on lit la partie de la doc qui j'imagine t'intéresse (ici) on a:
La méthode exec() exécute la recherche d'une correspondance sur une chaîne de caractères donnée. Elle renvoie un tableau contenant les résultats ou null.

Donc le code que tu veux c'est, j'imagine:

var toto = new RegExp("^(MOSCOU)$", "");
var match = toto.exec("MOSCOU");
var capture5 = match[1];

Conclusion, pas de bug tongue

Dernière modification par soshy (Le 15/03/2017, à 20:44)

Hors ligne

#3 Le 15/03/2017, à 21:52

slash-z

Re : [résolu] [javascript] bug expressions régulières

Merci pour ta réponse, je vais étudier ce "match" pour voir si ça peut convenir.

Dernière modification par slash-z (Le 15/03/2017, à 21:56)


Z comme zorro..... ou zobi, selon. Avec un slash devant parce que je m'appelle pas bilou.

Hors ligne