GNT sans publicité, site mobile, fonctionnalitées exclusives...

Expression régulière...

Le
Cenekemoi
Bonjour,

n'étant pas au top sur les expressions régulières, j'en recherche une
qui me permettrait de vider des parties de texte compris entre deux
mot-clés.

Exemple classique avec les mot-clés '<' et '>' afin de retirer les
balises Html : new RegExp("<[^>]*>", "g");

J'aimerais que les deux caractères < et > ci-dessus soient libres, par
exemple: _DEB_ et _FIN_ mais j'ai du mal à ce que tout fonctionne bien.

Mon essai (en m'inspirant de l'exemple ci-dessus):

<script>
var _H1_ = "_DEB_",_H2_ = "_FIN_";

exp = _H1_ +'link rel="stylesheet" href="../styles/drill_print.css"
type="text/css" media="print"'+ _H2_;
exp+= _H1_ +'style'+ _H2_ +'body,td { font-family: Arial; font-size:
9px;}';
exp+= _H1_ +'/style'+ _H2_;
exp+= _H1_ +'/head'+ _H2_;
exp+= _H1_ +'body onload="onLoad();onLoadTest()"'+ _H2_ +'thierry';
exp+= _H1_ +'/body'+ _H2_;

var reg = new RegExp(_H1_ +"[^"+ _H2_ +"]*"+ _H2_, "g");
alert( exp.replace(reg,"") );
</script>

Résultat:
_DEB_link rel="stylesheet" href="../styles/drill_print.css"
type="text/css" media="print"_FIN_body,td { font-family: Arial;
font-size: 9px;}thierry

C'est lié a priori au caractère "_" dans "drill_print", mais ça ne
m'avance guère.

Des idées ?

Merci d'avance

--
Cordialement, Thierry ;-)
Lire les 22 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 5
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #747781

n'étant pas au top sur les expressions régulières, j'en recherche une
qui me permettrait de vider des parties de texte compris entre deux
mot-clés.

Exemple classique avec les mot-clés '<' et '>' afin de retirer les
balises Html : new RegExp("<[^>]*>", "g");


1) Syntaxe JavaScript
---------------------

Tu peux simplifier l'écriture en écrivant :
/<[^>]*>/g
au lieu de :
new RegExp("<[^>]*>", "g")

Bien entendu ça ne marchera que si l'expression ne contient pas de
« / », mais elle peut à priori contenir des « " ».

2) Expressions régulières PCRE
------------------------------

Tu peux simplifier l'expression en écrivant :
new RegExp(" ou bien sûr :
/
(U = Ungreedy = non gourmand, ce qui signifie que l'expression prend le
plus petit motif qui marche au lieu d'aller chercher le plus grand).

J'aimerais que les deux caractères < et > ci-dessus soient libres, par
exemple: _DEB_ et _FIN_ mais j'ai du mal à ce que tout fonctionne bien.


Pour des *caractères* différents de < et > cela devrait marcher pareil,
mais pas pour des *chaînes de caractères*.

En effet, avec "_DEB_[^_FIN_]*_FIN_" et la chaîne "_DEB_ MACHIN _FIN_",
le I et le N de MACHIN arrêteront la recherche avant d'aller jusqu'à ton
_FIN_.

En revanche, RegExp("_DEB_.*_FIN", "gU") devrait fonctionner.

[...]

C'est lié a priori au caractère "_" dans "drill_print", mais ça ne
m'avance guère.

Des idées ?...


Tu dois comprendre que [_FIN_] et [^_FIN_] matchent un seul caractère et
pas un mot. D'ailleurs [^_FIN_] est équivalent à [^____FFNI___IN].

Olivier Miakinen
Le #747780
Le 19/07/2007 23:26, jé répondais à Cenekemoi :

new RegExp("_DEB_.*_FIN", "gU");


Si le contenu à virer entre _DEB_ et _FIN_ peut s'étendre sur plus d'une
ligne, il faut rajouter l'option s (DOTALL) ou ça ne marchera pas :

new RegExp("_DEB_.*_FIN", "gUs");

Olivier Miakinen
Le #747778
Le 19/07/2007 23:31, j'écrivais (à un « _ » près) :

new RegExp("_DEB_.*_FIN_", "gU");


Si le contenu à virer entre _DEB_ et _FIN_ peut s'étendre sur plus d'une
ligne, il faut rajouter l'option s (DOTALL) ou ça ne marchera pas :

new RegExp("_DEB_.*_FIN_", "gUs");


En reprenant ton code, cela donnera donc :

<script>
var _H1_ = "_DEB_",_H2_ = "_FIN_";

exp = [...]

var reg = new RegExp(_H1_ + ".*" + _H2_, "gUs");
alert(exp.replace(reg, ""));
</script>


Cenekemoi
Le #747493

n'étant pas au top sur les expressions régulières, j'en recherche une
qui me permettrait de vider des parties de texte compris entre deux
mot-clés.

Exemple classique avec les mot-clés '<' et '>' afin de retirer les
balises Html : new RegExp("<[^>]*>", "g");


1) Syntaxe JavaScript
---------------------

Tu peux simplifier l'écriture en écrivant :
/<[^>]*>/g
au lieu de :
new RegExp("<[^>]*>", "g")


Oui, merci, je le sais ; je le mettais sous cette forme pour être plus
proche du code que je proposais (avec le "

Bien entendu ça ne marchera que si l'expression ne contient pas de
« / », mais elle peut à priori contenir des « " ».

2) Expressions régulières PCRE
------------------------------

Tu peux simplifier l'expression en écrivant :
new RegExp("

Désolé, Olivier, mais je te rappelle que PCRE = Perl Compatible Regular
Expressions.

Si tu utilises le genre d'expression ci-dessus en *javascript*, sous FF
tu obtiens le message :
"invalid regular expression flag U"

...et une erreur de syntaxe sous IE.

Normal, Javascript n'est pas compatible PERL...

--
Cordialement, Thierry ;-)


Olivier Miakinen
Le #747227

Tu peux simplifier l'expression en écrivant :
new RegExp("

Désolé, Olivier, mais je te rappelle que PCRE = Perl Compatible Regular
Expressions.

Si tu utilises le genre d'expression ci-dessus en *javascript*, sous FF
tu obtiens le message :
"invalid regular expression flag U"

...et une erreur de syntaxe sous IE.

Normal, Javascript n'est pas compatible PERL...


Ben mince alors ! On m'aurait menti ?

Citation du « Standard ECMA-262, 3rd Edition - December 1999 » intitulé
« ECMAScript Language Specification », chapitre 15.10 :
-----------------------------------------------------------------------
The form and functionality of regular expressions is modelled after the
regular expression facility in the Perl 5 programming language.
-----------------------------------------------------------------------



Note que tout n'est pas perdu. Même si le flag U n'est pas reconnu, la
syntaxe « *? » doit fonctionner pour faire la même chose :

new RegExp("_DEB_.*?_FIN_", "gs");


Publicité
Suivre les réponses
Poster une réponse
Anonyme