Extraire des scripts par regexp

Résolu
Maliq Messages postés 10 Statut Membre -  
Maliq Messages postés 10 Statut Membre -
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
A voir également:

3 réponses

Maliq Messages postés 10 Statut Membre
 
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
tryan44 Messages postés 1381 Statut Membre 220
 
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
Maliq Messages postés 10 Statut Membre
 
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
tryan44 Messages postés 1381 Statut Membre 220
 
Oupsss, autant pour moi, j'ai zappé la rubrique du poste :)
0
Maliq Messages postés 10 Statut Membre
 
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