|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
salut j'ai une chaine de caractère qui contient ca
<a href='#' class='stattask' onclick='return selectSrv(10, "13021756");'><img class='stattask' src='/wsi/std/svs.gif' alt='13034113' title='13034113'> Adresse de Facturation 9 <div style='padding-left:16px;' style='padding-bottom:2px;'>Code Postal:<b>34184</b> Num:<b>13034113</b></div></a> et j'ain une expression régulière qui est celle-ci var re = /\<a.*\>\<img.*\>(  +(.*)(  +\<div.*\>.*\ <\/div\>\<\/a\>/i;lorsque j'execute var tRes = re.exec(text); et bien sous FireFox j'ai bien le résultat voulu. a savoir je retrouve Adresse de Facturation 9 et sous Internet Explorer et bien ca plante tout simplement. Une idée?? Merci |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Le 25/07/2007 11:05, Etienne SOBOLE a écrit :
> salut j'ai une chaine de caractère qui contient ca > > <a href='#' [...] <div Attention, ici il y a une erreur : tu mets un élément de type %block% dans un élément A qui n'accepte que des %inline%. Tu devrais envisager d'y mettre un SPAN plutôt qu'un DIV. > style='padding-left:16px;' style='padding-bottom:2px;'>[...] Ça, je crois que c'est une erreur aussi car tu définis deux fois l'attribut style : certains navigateurs pourraient ne garder que la première définition, d'autres que la seconde. Je pense que ce que tu voulais faire est : style='padding-left:16px; padding-bottom:2px;' > et j'ain une expression régulière qui est celle-ci > > var re = > /\<a.*\>\<img.*\>(  +(.*)(  +\<div.*\>.*\ <\/div\>\<\/a\>/i;Pourquoi tous ces \ ? Que je sache, les chevrons > et < ne sont pas des caractères réservés dans une RegExp ? var re = /<a.*><img.*>(  +(.*)(  +<div.*>.*<\/div><\/a>/i;> lorsque j'execute > var tRes = re.exec(text); > > et bien sous FireFox j'ai bien le résultat voulu. a savoir je retrouve > Adresse de Facturation 9 > et sous Internet Explorer et bien ca plante tout simplement. > > Une idée?? Ce que j'imagine, c'est peut-être que l'expression est trop complexe pour lui. Une idée serait de remplacer .* par [^>]* aux endroits où il ne peut en principe pas y avoir de chevrons fermants. Donc : var re = /<a[^>]*><img[^>]*>(  +(.*)(  +<div[^>]*>.*<\/div><\/a>/i;Une autre idée est de lui demander de privilégier les résultats les plus courts plutôt que les plus longs mais je ne sais pas si ça joue vraiment sur les performances : var re = /<a.*?><img.*?>(  +?(.*?)(  +?<div.*?>.*? <\/div><\/a>/i; |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Salut.
je vais tester, mais finalement dans l'urgence, j'ai mis un Id sur la partie que je voulais retrouver, et j'ai laisser tomber l'expression régulière. mais je vais quand meme essayer pour savoir si c'est ca! Merci Etienne "Olivier Miakinen" <om+news@miakinen.net> a écrit dans le message de news: 46a9bc3d$1@neottia.net... > Le 25/07/2007 12:32, je répondais à Étienne Sobole : >>> >>> var re = >>> /\<a.*\>\<img.*\>(  +(.*)(  +\<div.*\>.*\ <\/div\>\<\/a\>/i;>> >> Pourquoi tous ces \ ? Que je sache, les chevrons > et < ne sont pas des >> caractères réservés dans une RegExp ? > > Aussi bizarre que ça puisse paraître, ces \< et \> dans l'expression > rationnelle ont des chances d'être la cause du plantage. La norme ne > me semble pas très claire en tout cas et je n'arrive pas à voir si > « \< » doit être traduit en « < » comme dans les chaînes, ou bien si > c'est une erreur. > > Essaye déjà ça, et si ça ne marche toujours pas regarde mes autres > propositions. Mais en tout cas, les deux attributs style et le DIV > dans un A restent des erreurs également, qu'il faudrait corriger. |
|
![]() |
| Outils de la discussion | |
|
|