Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.10.2010, 10:55
Новичок на форуме
Отправить личное сообщение для Wyfinger Посмотреть профиль Найти все сообщения от Wyfinger
 
Регистрация: 17.10.2010
Сообщений: 8

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>
Ответить с цитированием
  #2 (permalink)  
Старый 21.10.2010, 10:59
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Одними регулярками тут не обойтись.
Ответить с цитированием
  #3 (permalink)  
Старый 21.10.2010, 11:07
Новичок на форуме
Отправить личное сообщение для Wyfinger Посмотреть профиль Найти все сообщения от Wyfinger
 
Регистрация: 17.10.2010
Сообщений: 8

Вы уверены?
Если не регуляркой - то как?
Ответить с цитированием
  #4 (permalink)  
Старый 21.10.2010, 11:17
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Ну вот как-то так, например.

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;
        }
    }
}));
Ответить с цитированием
  #5 (permalink)  
Старый 21.10.2010, 11:20
Новичок на форуме
Отправить личное сообщение для Wyfinger Посмотреть профиль Найти все сообщения от Wyfinger
 
Регистрация: 17.10.2010
Сообщений: 8

Вообще с регулярками все как-то сложно.
Не могу даже просто выдрать тег:
<table.*class.*=.*["']text_adv["'].*>[\s\S]*<\/table>


не работает (пример в редакторе)
Ответить с цитированием
  #6 (permalink)  
Старый 21.10.2010, 11:26
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Почитайте про жадность квантификаторов.
Ответить с цитированием
  #7 (permalink)  
Старый 21.10.2010, 12:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Вариант без регулярок
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);
Ответить с цитированием
  #8 (permalink)  
Старый 22.10.2010, 03:04
Новичок на форуме
Отправить личное сообщение для Wyfinger Посмотреть профиль Найти все сообщения от Wyfinger
 
Регистрация: 17.10.2010
Сообщений: 8

Сообщение от рони Посмотреть сообщение
Вариант без регулярок
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);
Да нет, мне нужен разбор текста, а не элементов DOM.
Ответить с цитированием
  #9 (permalink)  
Старый 22.10.2010, 11:48
Кандидат Javascript-наук
Отправить личное сообщение для Jurasmi Посмотреть профиль Найти все сообщения от Jurasmi
 
Регистрация: 25.11.2008
Сообщений: 115

Информационный шум:
Цитата:
Если у вас есть проблема и вы думаете, что можете решить её с помощью регулярки, то, на самом деле, у вас две проблемы.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
регулярное выражение theo_ Общие вопросы Javascript 15 21.06.2010 10:29
RegExp и search. Проблема с переменной в выражении Arconas Общие вопросы Javascript 2 21.05.2010 15:45
мааленький вопрос по Regexp:) mirniy Общие вопросы Javascript 1 22.01.2009 20:47
вопрос по Regexp vovasvv Общие вопросы Javascript 7 22.01.2009 00:47
RegExp & Mozilla (быстродействие) tau Общие вопросы Javascript 9 24.11.2008 16:35