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, время: 07:16. |