Ну вот как-то так, например.
var str = '<div class="c1">text1<div class="c2">text2<div class="c3">text3</div></div></div>';
var level = 0, inside = false;
alert(str.replace(/<\/?div[^>]*>|[^<]+/g, function(tag) {
if (inside) {
if (tag.indexOf('<div') == 0) {
level++;
} else if (tag == '</div>') {
if (level) {
level--;
} else {
inside = false;
}
}
return '';
} else {
if (tag == '<div class="c2">') {
inside = true;
return '';
} else {
return tag;
}
}
}));