Extraire des scripts par regexp

Résolu/Fermé
Maliq Messages postés 8 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 25 juillet 2015 - 2 juil. 2013 à 07:56
Maliq Messages postés 8 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 25 juillet 2015 - 2 juil. 2013 à 18:24
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 8 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 25 juillet 2015
2 juil. 2013 à 08:07
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 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 220
2 juil. 2013 à 08:50
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 8 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 25 juillet 2015
2 juil. 2013 à 09:05
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 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 220
2 juil. 2013 à 09:07
Oupsss, autant pour moi, j'ai zappé la rubrique du poste :)
0
Maliq Messages postés 8 Date d'inscription lundi 15 février 2010 Statut Membre Dernière intervention 25 juillet 2015
2 juil. 2013 à 18:24
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