RegExp выражение
Подскажите пожалуйста как составить следующую регулярку:
Вырезать тег целиком с учетом вложенности например: <div class="c1">text1<div class="c2">text2<div class="c3">text3</div></div></div>Нужно вырезать (replace) тег <div class="c2"> с содержымым, т.е. остаться должно: <div class="c1">text1</div> |
Одними регулярками тут не обойтись.
|
Вы уверены?
Если не регуляркой - то как? |
Ну вот как-то так, например.
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;
}
}
}));
|
Вообще с регулярками все как-то сложно.
Не могу даже просто выдрать тег: <table.*class.*=.*["']text_adv["'].*>[\s\S]*<\/table> не работает (пример в редакторе) |
Почитайте про жадность квантификаторов.
|
Вариант без регулярок
var str = '<div class="c1">text1<div class="c2">text2<div class="c3">text3</div></div></div>';
var div = document.createElement('div')
div.innerHTML=str;
var obj= div.getElementsByTagName('div');
for (var i=0; i<obj.length; i++) {
if(obj[i].className=="c2") {
obj[i].parentNode.removeChild(obj[i]) ;break
}
}
str=div.innerHTML;
alert(str);
|
Цитата:
|
Информационный шум:
Цитата:
|
| Часовой пояс GMT +3, время: 17:22. |