2009-05-11 14 views
4

Pour l'exemple, je suis en train de remplacerEssayer de remplacer les balises HTML en utilisant regex

<script type='text/javascript'>some stuff</script> 

avec:

<div type='text/javascript'>some stuff</div> 

Je teste actuellement avec:

alert(o.replace(/(?:<\s*\/?\s*)(script)(?:\s*([^>]*)?\s*>)/gi ,'div')); 

Mais ce que je reçois est:

divsomestuffdiv 

Comment puis-je obtenir ceci pour remplacer seulement la portion «script» et préserver les autres caractères de balisage et d'attribut?

Répondre

10

Vous devez conserver les supports d'étiquette d'ouverture et de fermeture. Donc, essayez ceci:

o.replace(/(<\s*\/?\s*)script(\s*([^>]*)?\s*>)/gi ,'$1div$2') 
2

Les méthodes DOM sont mieux adaptées que les expressions régulières. De cette façon, vous manipuler votre document logiquement au lieu comme texte brut:

var els = document.getElementsByTagName('script'); 
for (var i = 0, el; el = els[i]; i++) { 
    var new = document.createElement('div'); 
    new.type = el.type; 
    el.parentNode.replaceChild(el, new); 
} 
2

Une façon naïve mais lisible serait de le faire en deux passes et je suppose que le premier match et de remplacer le

<script

partie avec

<div

, puis une autre qui correspondrait

</script>

et le remplacer par

</div>