Как насчет:
data.replace(/ on\w+="[^"]*"/g, '');
Edit от комментариев:
Это предназначено для запуска на разметке, как один раз вещь. Если вы пытаетесь динамически удалять события во время выполнения страницы, это немного другая история. Библиотеку JavaScript, как JQuery делает его очень легко, хотя:
$('*').unbind();
Edit:
Ограничение это только внутри тегов намного сложнее. Я не уверен, что это можно сделать с помощью одного выражения регулярного выражения. Тем не менее, это должно получить вас, если никто не может придумать один:
var matched;
do
{
matched = false;
data = data.replace(/(<[^>]+)(on\w+="[^"]*")+/g,
function(match, goodPart)
{
matched = true;
return goodPart;
});
} while(matched);
Edit:
Я сдаюсь при написании одного регулярного выражения для этого. Должен быть какой-то способ проверить контекст соответствия, не зафиксировав при этом начало тега в вашем матче, но мой RegEx-fu недостаточно силен. Это самое элегантное решение, которое я собираюсь придумать:
data = data.replace(/<[^>]+/g, function(match)
{
return match.replace(/ on\w+="[^"]*"/g, '');
});
-1 (X) HTML не является регулярным языком. Если вы делаете это как своего рода «дезинфекция», это особенно опасно - могут быть какие-то краевые случаи, которые анализируются как JavaScript некоторыми анализаторами суффиксов тегов; очевидным кандидатом являются условные комментарии IE. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –