Вопрос решён. Выкладываю, если кому надо. Парсит вложенные <tag>..<tag> и </tag>..</tag> независимо, для моей задачи так даже лучше.
a=a.replace(r("(<"+tag+">)([\\s\\S]*?)(<\\/?"+tag+">)"),function($0,$1,$2,$3){
if($3.charAt(1)!='/'){
return $1+$2;
}
else{
return $0;
}
});
a=a.replace(r("(<\\/"+tag+">)([\\s\\S]*?)(<\\/?"+tag+">)"),function($0,$1,$2,$3){
if($3.charAt(1)=='/'){
return $2+$3;
}
else{
return $0;
}
});