Extraire des scripts par regexp

Résolu
Bonjour,

bonjour j'ai un probleme semblable.. en faite j'ai une chaine comme cela:

str = "html 1<script>script 1</script>html 2<script>script 2</script>html 3";

je veux en extraire les tag script dans un tableau scriptTble:

scriptTble[0] = "<script>script 1</script>"

scriptTble[1] = "<script>script 2</script>"

et retourner une chaine de str sans les script:

str = "html 1 html 2 html 3"
j'aimerai utiliser les expreg puisque c plus elegant et rapide.

je fais ceci pour evaluer les script retourné par des requettes ajax, j'ai deja essayé par la methode d'affacter toute la chaine a un element <div> du DOM puis extraire les scripts par mydiv.getElementsByTagName('script') mais je me suis appercu que sur certain browser ca fait executer les scripts 2 fois
Nb le nombre des scripts dans le code est pas connu d'avance il peu y avoir aucun comme plusieurs

merci en avance

3 réponses

  1. j'ai utilisé ce code:

    var pat = /\<script\>.*\<\/script\>/gi;
    var str ="html 1<script>script 1</script>html 2<script>script 2</script>html 3";
    alert(str.match(pat)[0]);
    alert(str.match(pat)[1]);
    alert(str.replace(pat, " "));

    mais il me retourne:
    <script>script 1</script>html 2<script>script 2</script>
    undefined
    html 1 html 3
    0
    1. Pourquoi utiliser spécialement un regexp quand on peu faire sans ?
      <?php
      	$symbole = array("<script>","</script>");
      	$chaine = "html 1<script>script 1</script>html 2<script>script 2</script>html 3";
      	$remplace = str_replace($symbole,'',$chaine); 
      	echo $remplace;
      ?>
      

      0
      1. Bonjour et merci Tryan44
        en faite j'ai peut etre oublié de mentionner que je cherche la solution coté client cela veux dire en javascript et nous somme bien sur la bonne rubrique ..
        0
      2. Oupsss, autant pour moi, j'ai zappé la rubrique du poste :)
        0
    2. bon finalement j'ai reussi a resoudre le probleme: ceci est la fonction qui evalue les script contenue dans une chaine (respText) puis retrourne une chaine sans ces scripts

      function evalScripts(respTxt){  
      	var pat1 = /<script>.{0,8}([^<][^\/][^s][^c][^r][^i][^p][^t][^>])*<\/script>/gi;
      	var pat2 = /(\'[^\']*')|(\"[^\"]*\")/gi;
      	var scripts = new Array;
      	scripts = respTxt.replace(pat2, "").match(pat1);
      	for(var i in scripts){
      		if (dj_global.execScript) dj_global.execScript(scripts[i]); else if (dj_global.eval) dj_global.eval(scripts[i]); else eval(scripts[i]);
      		respTxt = respTxt.replace(RegExp(scripts[i], "g"), "");
      	}
      	return respTxt;
      }
      

      nb. pat2 est pour ne pas selectionner les scripts entre guillements ou strophe (cela veux dire c du text et pas de script)
      0