Que diriez-vous:
data.replace(/ on\w+="[^"]*"/g, '');
Modifier des commentaires:
Ceci est destiné à être exécuté sur votre balisage comme une chose de temps. Si vous essayez de supprimer des événements dynamiquement pendant l'exécution de la page, c'est une histoire légèrement différente. Une bibliothèque javascript comme jQuery rend extrêmement facile, cependant:
$('*').unbind();
Edit:
La restriction cela que dans les balises est beaucoup plus difficile. Je ne suis pas sûr que cela puisse être fait avec une seule expression regex. Cependant, cela devrait vous obtenir par si personne ne peut venir avec un:
var matched;
do
{
matched = false;
data = data.replace(/(<[^>]+)(on\w+="[^"]*")+/g,
function(match, goodPart)
{
matched = true;
return goodPart;
});
} while(matched);
Edit:
Je me rends à écrire une seule regex pour cela. Il doit y avoir un moyen de vérifier le contexte d'un match sans réellement capturer le début de la balise dans votre match, mais mon RegEx-fu n'est pas assez fort. Ceci est la solution la plus élégante, je vais venir avec:
data = data.replace(/<[^>]+/g, function(match)
{
return match.replace(/ on\w+="[^"]*"/g, '');
});
-1 (X) HTML est pas une langue régulière. Si vous faites cela comme une sorte de "désinfection", c'est particulièrement dangereux - il peut y avoir quelques cas de bord qui sont analysés comme JavaScript par certains analyseurs de soupe de balises; un candidat évident est les commentaires conditionnels d'IE. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –