entretemps j'ai procédé à un autre essai de RegExp :
var rgx=new RegExp("^ *"+property+":");
et là ça roule dans tous mes cas, c'est donc le "s" qui pose pb ??? -- Une Bévue
Elegie
Une Bévue wrote:
Bonjour,
manipulant des css rules,
Juste avant de poursuivre, je vous invite à consulter, si d'aventure elles vous étaient inconnues, les entrées des archives comp.lang.javascript pour "currentStyle" et "getComputedStyle".
j'ai besoin de détecter "background dans une chaine qui peut avoir les formes suivantes :
background: <les attributs> // pas d'espace en 1ier caractère background: <les attributs> // une espace en 1ier caractère
et ne pas détecter des chaines de la forme :
-moz-background-clip: < attributs>
Le parsing que vous souhaitez faire s'accordera, j'imagine, avec le style CSS que vous employez. Toutefois, sachez que la syntaxe CSS permet quelques subtilités qui, si employées, pourraient rendre une telle détection beaucoup plus ardue à opérer.
<URL:http://www.w3.org/TR/CSS21/syndata.html>
Le fonction suivante devrait répondre aux besoins les plus courants. Néanmoins, sa robustesse pourra être améliorée en portant une attention particulière aux chaînes CSS ou caractères "{", à l'aide des techniques de substitution que nous avons vues avec le "javascript highlighter", il y a peu.
--- function getPropertyValue(s,p) { var v=[],a,re=new RegExp( "[{;][srnf]*" + p + "[srnf]*:[srnf]*" + "([^};]*)" , "gi" ); s=s.replace(//*([^*]|(*+[^*/]))**+//g,""); while((a=re.exec(s))!=null) { v.push(a[1].replace(/^[srnf]+|[srnf]+$/,"")); } return v; } ---
si j'utilise :
var rgx=new RegExp("s"+property+":");
Le caractère "" sert à "échapper" des entités, à la fois dans une chaîne et dans une expression régulière. Dans l'expression RegExp(...), il vous faut donc le doubler: RegExp("s");
Cheers, Elegie.
Une Bévue wrote:
Bonjour,
manipulant des css rules,
Juste avant de poursuivre, je vous invite à consulter, si d'aventure
elles vous étaient inconnues, les entrées des archives
comp.lang.javascript pour "currentStyle" et "getComputedStyle".
j'ai besoin de détecter "background dans une
chaine qui peut avoir les formes suivantes :
background: <les attributs> // pas d'espace en 1ier caractère
background: <les attributs> // une espace en 1ier caractère
et ne pas détecter des chaines de la forme :
-moz-background-clip: < attributs>
Le parsing que vous souhaitez faire s'accordera, j'imagine, avec le
style CSS que vous employez. Toutefois, sachez que la syntaxe CSS permet
quelques subtilités qui, si employées, pourraient rendre une telle
détection beaucoup plus ardue à opérer.
<URL:http://www.w3.org/TR/CSS21/syndata.html>
Le fonction suivante devrait répondre aux besoins les plus courants.
Néanmoins, sa robustesse pourra être améliorée en portant une attention
particulière aux chaînes CSS ou caractères "{", à l'aide des techniques
de substitution que nous avons vues avec le "javascript highlighter", il
y a peu.
---
function getPropertyValue(s,p) {
var v=[],a,re=new RegExp(
"[{;][\s\r\n\f]*" +
p +
"[\s\r\n\f]*:[\s\r\n\f]*" +
"([^};]*)" ,
"gi"
);
s=s.replace(//*([^*]|(*+[^*/]))**+//g,"");
while((a=re.exec(s))!=null) {
v.push(a[1].replace(/^[srnf]+|[srnf]+$/,""));
}
return v;
}
---
si j'utilise :
var rgx=new RegExp("s"+property+":");
Le caractère "" sert à "échapper" des entités, à la fois dans une
chaîne et dans une expression régulière. Dans l'expression RegExp(...),
il vous faut donc le doubler: RegExp("\s");
Juste avant de poursuivre, je vous invite à consulter, si d'aventure elles vous étaient inconnues, les entrées des archives comp.lang.javascript pour "currentStyle" et "getComputedStyle".
j'ai besoin de détecter "background dans une chaine qui peut avoir les formes suivantes :
background: <les attributs> // pas d'espace en 1ier caractère background: <les attributs> // une espace en 1ier caractère
et ne pas détecter des chaines de la forme :
-moz-background-clip: < attributs>
Le parsing que vous souhaitez faire s'accordera, j'imagine, avec le style CSS que vous employez. Toutefois, sachez que la syntaxe CSS permet quelques subtilités qui, si employées, pourraient rendre une telle détection beaucoup plus ardue à opérer.
<URL:http://www.w3.org/TR/CSS21/syndata.html>
Le fonction suivante devrait répondre aux besoins les plus courants. Néanmoins, sa robustesse pourra être améliorée en portant une attention particulière aux chaînes CSS ou caractères "{", à l'aide des techniques de substitution que nous avons vues avec le "javascript highlighter", il y a peu.
--- function getPropertyValue(s,p) { var v=[],a,re=new RegExp( "[{;][srnf]*" + p + "[srnf]*:[srnf]*" + "([^};]*)" , "gi" ); s=s.replace(//*([^*]|(*+[^*/]))**+//g,""); while((a=re.exec(s))!=null) { v.push(a[1].replace(/^[srnf]+|[srnf]+$/,"")); } return v; } ---
si j'utilise :
var rgx=new RegExp("s"+property+":");
Le caractère "" sert à "échapper" des entités, à la fois dans une chaîne et dans une expression régulière. Dans l'expression RegExp(...), il vous faut donc le doubler: RegExp("s");
Cheers, Elegie.
unbewusst.sein
Elegie wrote:
Juste avant de poursuivre, je vous invite à consulter, si d'aventure elles vous étaient inconnues, les entrées des archives comp.lang.javascript pour "currentStyle" et "getComputedStyle".
Le parsing que vous souhaitez faire s'accordera, j'imagine, avec le style CSS que vous employez. Toutefois, sachez que la syntaxe CSS permet quelques subtilités qui, si employées, pourraient rendre une telle détection beaucoup plus ardue à opérer.
<URL:http://www.w3.org/TR/CSS21/syndata.html>
merci pour les refs, en effet je procède en deux temps :
je recherche en premier lieu le "selector" en balayant tous les rules ; puis je découpe les propriétés en me basant sur ";" ; enfin je détecte la propriété correspondante et je change sa valeur :
function changeRule(selector,property,value){ var rgx=new RexgExp("^s*"+property+"s*:"); var rules=document.styleSheets[0].cssRules; for(var i=0;i<rules.length;i++){ // selector selection if(rules[i].selectorText === selector){ //split properties according to ";" var cssTexts=rules[i].style.cssTest.split(";"); // look for the right property for(var j=0;j<cssTexts.length;j++){ if(rgx.test(cssTexts[j])){ cssTexts[j]=property+':'+value; } } // restore the whole rule rules[i].style.cssText=cssTexts.join(';'); return true; // selector & property found } } return false; // no change }
Le fonction suivante devrait répondre aux besoins les plus courants. Néanmoins, sa robustesse pourra être améliorée en portant une attention particulière aux chaînes CSS ou caractères "{", à l'aide des techniques de substitution que nous avons vues avec le "javascript highlighter", il y a peu.
--- function getPropertyValue(s,p) { var v=[],a,re=new RegExp( "[{;][srnf]*" + p + "[srnf]*:[srnf]*" + "([^};]*)" , "gi" ); s=s.replace(//*([^*]|(*+[^*/]))**+//g,""); while((a=re.exec(s))!=null) { v.push(a[1].replace(/^[srnf]+|[srnf]+$/,"")); } return v; } ---
si j'utilise :
var rgx=new RegExp("s"+property+":");
Le caractère "" sert à "échapper" des entités, à la fois dans une chaîne et dans une expression régulière. Dans l'expression RegExp(...), il vous faut donc le doubler: RegExp("s");
j'y log les deux changement opérés par changeRule() -- Une Bévue
Elegie <elegie@invalid.com> wrote:
Juste avant de poursuivre, je vous invite à consulter, si d'aventure
elles vous étaient inconnues, les entrées des archives
comp.lang.javascript pour "currentStyle" et "getComputedStyle".
Le parsing que vous souhaitez faire s'accordera, j'imagine, avec le
style CSS que vous employez. Toutefois, sachez que la syntaxe CSS permet
quelques subtilités qui, si employées, pourraient rendre une telle
détection beaucoup plus ardue à opérer.
<URL:http://www.w3.org/TR/CSS21/syndata.html>
merci pour les refs, en effet je procède en deux temps :
je recherche en premier lieu le "selector" en balayant tous les rules ;
puis je découpe les propriétés en me basant sur ";" ;
enfin je détecte la propriété correspondante et je change sa valeur :
function changeRule(selector,property,value){
var rgx=new RexgExp("^\s*"+property+"\s*:");
var rules=document.styleSheets[0].cssRules;
for(var i=0;i<rules.length;i++){
// selector selection
if(rules[i].selectorText === selector){
//split properties according to ";"
var cssTexts=rules[i].style.cssTest.split(";");
// look for the right property
for(var j=0;j<cssTexts.length;j++){
if(rgx.test(cssTexts[j])){
cssTexts[j]=property+':'+value;
}
}
// restore the whole rule
rules[i].style.cssText=cssTexts.join(';');
return true; // selector & property found
}
}
return false; // no change
}
Le fonction suivante devrait répondre aux besoins les plus courants.
Néanmoins, sa robustesse pourra être améliorée en portant une attention
particulière aux chaînes CSS ou caractères "{", à l'aide des techniques
de substitution que nous avons vues avec le "javascript highlighter", il
y a peu.
---
function getPropertyValue(s,p) {
var v=[],a,re=new RegExp(
"[{;][\s\r\n\f]*" +
p +
"[\s\r\n\f]*:[\s\r\n\f]*" +
"([^};]*)" ,
"gi"
);
s=s.replace(//*([^*]|(*+[^*/]))**+//g,"");
while((a=re.exec(s))!=null) {
v.push(a[1].replace(/^[srnf]+|[srnf]+$/,""));
}
return v;
}
---
si j'utilise :
var rgx=new RegExp("s"+property+":");
Le caractère "" sert à "échapper" des entités, à la fois dans une
chaîne et dans une expression régulière. Dans l'expression RegExp(...),
il vous faut donc le doubler: RegExp("\s");
Juste avant de poursuivre, je vous invite à consulter, si d'aventure elles vous étaient inconnues, les entrées des archives comp.lang.javascript pour "currentStyle" et "getComputedStyle".
Le parsing que vous souhaitez faire s'accordera, j'imagine, avec le style CSS que vous employez. Toutefois, sachez que la syntaxe CSS permet quelques subtilités qui, si employées, pourraient rendre une telle détection beaucoup plus ardue à opérer.
<URL:http://www.w3.org/TR/CSS21/syndata.html>
merci pour les refs, en effet je procède en deux temps :
je recherche en premier lieu le "selector" en balayant tous les rules ; puis je découpe les propriétés en me basant sur ";" ; enfin je détecte la propriété correspondante et je change sa valeur :
function changeRule(selector,property,value){ var rgx=new RexgExp("^s*"+property+"s*:"); var rules=document.styleSheets[0].cssRules; for(var i=0;i<rules.length;i++){ // selector selection if(rules[i].selectorText === selector){ //split properties according to ";" var cssTexts=rules[i].style.cssTest.split(";"); // look for the right property for(var j=0;j<cssTexts.length;j++){ if(rgx.test(cssTexts[j])){ cssTexts[j]=property+':'+value; } } // restore the whole rule rules[i].style.cssText=cssTexts.join(';'); return true; // selector & property found } } return false; // no change }
Le fonction suivante devrait répondre aux besoins les plus courants. Néanmoins, sa robustesse pourra être améliorée en portant une attention particulière aux chaînes CSS ou caractères "{", à l'aide des techniques de substitution que nous avons vues avec le "javascript highlighter", il y a peu.
--- function getPropertyValue(s,p) { var v=[],a,re=new RegExp( "[{;][srnf]*" + p + "[srnf]*:[srnf]*" + "([^};]*)" , "gi" ); s=s.replace(//*([^*]|(*+[^*/]))**+//g,""); while((a=re.exec(s))!=null) { v.push(a[1].replace(/^[srnf]+|[srnf]+$/,"")); } return v; } ---
si j'utilise :
var rgx=new RegExp("s"+property+":");
Le caractère "" sert à "échapper" des entités, à la fois dans une chaîne et dans une expression régulière. Dans l'expression RegExp(...), il vous faut donc le doubler: RegExp("s");
" "(espace) et "s" ne représente pas les mêmes choses... "*" : reconnaissance pour zéro fois ou plus. "+" : reconnaissance pour 1 fois ou plus.
et pour zéro fois ... y a rien :-(
{0} ou {0,0} ? ;-)
ASM
" "(espace) et "s" ne représente pas les mêmes choses... "*" : reconnaissance pour zéro fois ou plus. "+" : reconnaissance pour 1 fois ou plus. et pour zéro fois ... y a rien :-(
{0} ou {0,0} ? ;-)
c'est touj pour mon idée d'exclusion :<45e8bc58$0$25913$
regchaine = ">(n|r)<";
non t = t.replace(/{>}(n|r|nr){<}/g,'<br>'); ne marche pas mieux même pire : rien n'est remplacé
Là : t = t.replace(/{[^>]}(n|r|nr){[^<]}/g,'<br>'); pareil
Ha! j'approche, j'approche : t = t.replace(/>{0}(n|r|nr)<{0}/g,'<br>'); fait aussi bien que : t = t.replace(/(n|r|nr)/g,'<br>'); c'est à dire cracra
-- Stephane Moriaux et son (moins) vieux Mac déjà dépassé
" "(espace) et "s" ne représente pas les mêmes choses...
"*" : reconnaissance pour zéro fois ou plus.
"+" : reconnaissance pour 1 fois ou plus.
et pour zéro fois ... y a rien :-(
{0} ou {0,0} ? ;-)
c'est touj pour mon idée d'exclusion
:<45e8bc58$0$25913$ba4acef3@news.orange.fr>
regchaine = ">(n|r)<";
non
t = t.replace(/{>}(n|r|nr){<}/g,'<br>');
ne marche pas mieux
même pire : rien n'est remplacé
Là :
t = t.replace(/{[^>]}(n|r|nr){[^<]}/g,'<br>');
pareil
Ha! j'approche, j'approche :
t = t.replace(/>{0}(n|r|nr)<{0}/g,'<br>');
fait aussi bien que :
t = t.replace(/(n|r|nr)/g,'<br>');
c'est à dire cracra
--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé
" "(espace) et "s" ne représente pas les mêmes choses... "*" : reconnaissance pour zéro fois ou plus. "+" : reconnaissance pour 1 fois ou plus. et pour zéro fois ... y a rien :-(
{0} ou {0,0} ? ;-)
c'est touj pour mon idée d'exclusion :<45e8bc58$0$25913$
regchaine = ">(n|r)<";
non t = t.replace(/{>}(n|r|nr){<}/g,'<br>'); ne marche pas mieux même pire : rien n'est remplacé
Là : t = t.replace(/{[^>]}(n|r|nr){[^<]}/g,'<br>'); pareil
Ha! j'approche, j'approche : t = t.replace(/>{0}(n|r|nr)<{0}/g,'<br>'); fait aussi bien que : t = t.replace(/(n|r|nr)/g,'<br>'); c'est à dire cracra
-- Stephane Moriaux et son (moins) vieux Mac déjà dépassé
Olivier Miakinen
Ha! j'approche, j'approche : t = t.replace(/>{0}(n|r|nr)<{0}/g,'<br>'); fait aussi bien que : t = t.replace(/(n|r|nr)/g,'<br>'); c'est à dire cracra
Je n'ai pas encore tout lu de ce que tu cherches à faire, mais il est possible que les assertions soient ce que tu cherches.
foo(?ºr) trouve un foo s'il est suivi par un bar foo(?!bar) trouve un foo s'il n'est pas suivi par un bar (?<=foo)bar trouve un bar s'il est précédé par un foo (?<!foo)bar trouve un bar s'il n'est pas précédé par un foo
Ha! j'approche, j'approche :
t = t.replace(/>{0}(n|r|nr)<{0}/g,'<br>');
fait aussi bien que :
t = t.replace(/(n|r|nr)/g,'<br>');
c'est à dire cracra
Je n'ai pas encore tout lu de ce que tu cherches à faire, mais il est
possible que les assertions soient ce que tu cherches.
foo(?ºr) trouve un foo s'il est suivi par un bar
foo(?!bar) trouve un foo s'il n'est pas suivi par un bar
(?<=foo)bar trouve un bar s'il est précédé par un foo
(?<!foo)bar trouve un bar s'il n'est pas précédé par un foo
Ha! j'approche, j'approche : t = t.replace(/>{0}(n|r|nr)<{0}/g,'<br>'); fait aussi bien que : t = t.replace(/(n|r|nr)/g,'<br>'); c'est à dire cracra
Je n'ai pas encore tout lu de ce que tu cherches à faire, mais il est possible que les assertions soient ce que tu cherches.
foo(?ºr) trouve un foo s'il est suivi par un bar foo(?!bar) trouve un foo s'il n'est pas suivi par un bar (?<=foo)bar trouve un bar s'il est précédé par un foo (?<!foo)bar trouve un bar s'il n'est pas précédé par un foo
ASM
Je n'ai pas encore tout lu de ce que tu cherches à faire, mais il est possible que les assertions soient ce que tu cherches.
foo(?ºr) trouve un foo s'il est suivi par un bar foo(?!bar) trouve un foo s'il n'est pas suivi par un bar (?<=foo)bar trouve un bar s'il est précédé par un foo (?<!foo)bar trouve un bar s'il n'est pas précédé par un foo
Ha! oui ! le dernier là ne m'a pas l'air mal.
Bien que je n'y comprenne rien ? caractère précédent (me dit-on qque part sur le net) < le caractère à repérer (non ça doit pas être ça) ?< '<' le caractère précédent (la suite ?) ? ?< ... je sèche ! non (pas vu cette option là où j'ai fouillé, ni le = )
Mais où as-tu pu trouver ça ?
(non, non, par pitié pas une norme où il faut savoir lire les regexp pour la déchiffrer ! ! !)
Je refouille mes marque-pages et pour les assertions, j'ai ça : http://www.expreg.com/symbole.php on n'y parle pas des "oubliés" < > ! De fil en aiguille j'arrive tt de même ici : http://www.expreg.com/assertion2.php où je lis : "Assertion arrière négative (?<!motif) " Heueueu ! oui ? à digérer tranquillement dès qu'on a compris la phrase :-)
-- Stephane Moriaux et son (moins) vieux Mac déjà dépassé
Je n'ai pas encore tout lu de ce que tu cherches à faire, mais il est
possible que les assertions soient ce que tu cherches.
foo(?ºr) trouve un foo s'il est suivi par un bar
foo(?!bar) trouve un foo s'il n'est pas suivi par un bar
(?<=foo)bar trouve un bar s'il est précédé par un foo
(?<!foo)bar trouve un bar s'il n'est pas précédé par un foo
Ha! oui ! le dernier là ne m'a pas l'air mal.
Bien que je n'y comprenne rien
? caractère précédent (me dit-on qque part sur le net)
< le caractère à repérer (non ça doit pas être ça)
?< '<' le caractère précédent (la suite ?) ?
?< ... je sèche
! non (pas vu cette option là où j'ai fouillé, ni le = )
Mais où as-tu pu trouver ça ?
(non, non, par pitié pas une norme où il faut savoir lire les regexp
pour la déchiffrer ! ! !)
Je refouille mes marque-pages et pour les assertions, j'ai ça :
http://www.expreg.com/symbole.php
on n'y parle pas des "oubliés" < > ! De fil en aiguille j'arrive tt de même ici :
http://www.expreg.com/assertion2.php
où je lis : "Assertion arrière négative (?<!motif) "
Heueueu ! oui ?
à digérer tranquillement dès qu'on a compris la phrase :-)
--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé
Je n'ai pas encore tout lu de ce que tu cherches à faire, mais il est possible que les assertions soient ce que tu cherches.
foo(?ºr) trouve un foo s'il est suivi par un bar foo(?!bar) trouve un foo s'il n'est pas suivi par un bar (?<=foo)bar trouve un bar s'il est précédé par un foo (?<!foo)bar trouve un bar s'il n'est pas précédé par un foo
Ha! oui ! le dernier là ne m'a pas l'air mal.
Bien que je n'y comprenne rien ? caractère précédent (me dit-on qque part sur le net) < le caractère à repérer (non ça doit pas être ça) ?< '<' le caractère précédent (la suite ?) ? ?< ... je sèche ! non (pas vu cette option là où j'ai fouillé, ni le = )
Mais où as-tu pu trouver ça ?
(non, non, par pitié pas une norme où il faut savoir lire les regexp pour la déchiffrer ! ! !)
Je refouille mes marque-pages et pour les assertions, j'ai ça : http://www.expreg.com/symbole.php on n'y parle pas des "oubliés" < > ! De fil en aiguille j'arrive tt de même ici : http://www.expreg.com/assertion2.php où je lis : "Assertion arrière négative (?<!motif) " Heueueu ! oui ? à digérer tranquillement dès qu'on a compris la phrase :-)
-- Stephane Moriaux et son (moins) vieux Mac déjà dépassé