Как насчет:
data.replace(/ on\w+="[^"]*"/g, '');
Редактировать из комментариев:
Это предназначено для запуска в вашей разметке как разовая вещь.Если вы пытаетесь динамически удалять события во время выполнения страницы, это немного другая история.Библиотека javascript, такая как jQuery, делает это чрезвычайно простым, хотя:
$('*').unbind();
Edit:
Ограничить это только внутри тегов намного сложнее.Я не уверен, что это можно сделать с помощью одного выражения регулярного выражения.Тем не менее, это должно помочь вам, если никто не может придумать:
var matched;
do
{
matched = false;
data = data.replace(/(<[^>]+)( on\w+="[^"]*")+/g,
function(match, goodPart)
{
matched = true;
return goodPart;
});
} while(matched);
Редактировать:
Я сдаюсь, написав для этого одно регулярное выражение.Должен быть какой-то способ проверить контекст соответствия без фактического захвата начала тега в вашем совпадении, но мой RegEx-fu недостаточно силен.Это самое элегантное решение, которое я собираюсь предложить:
data = data.replace(/<[^>]+/g, function(match)
{
return match.replace(/ on\w+="[^"]*"/g, '');
});