Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> регулярное выражение, очистка тега от мусора 
V
    Опции темы
Frozen_Coyote
Дата 26.7.2011, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 20.9.2007

Репутация: нет
Всего: нет



Добрый день,

помогите плиз составить регулярку, очищающую тег от мусора (стили, классы  и прочее) НО:

если в теге присуствует colspan=значение или rowspan=значение - эти параметры оставлять

Код

str = "<td style=\"height: 20%\" rowspan=\"3\">1</td><td style=\"width: 50%\" colspan=\"2\">3</td>";
myRe=/<(.+?)\s(.+?)?(colspan|rowspan=\"(.+?)\")?(.+?)>/gi;
str = str.replace(myRe, '<$1 $3>');
alert(str);


эта вот канитель у меня само собой не работает!

буду признателен за помощь!
PM MAIL   Вверх
Evghenusi
Дата 27.7.2011, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 1
Всего: 15



может так?
Код

str = str.replace(/<(\w+).*?((?:rowspan|colspan)="\d+")?>/gi, '<$1 $2>');


или так, для экранированных кавычек
Код

/<(\w+).*?((?:rowspan|colspan)=\\"\d+\\")?>/gi


Это сообщение отредактировал(а) Evghenusi - 27.7.2011, 00:13
PM WWW   Вверх
Frozen_Coyote
Дата 27.7.2011, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 20.9.2007

Репутация: нет
Всего: нет



Хм... почему то не отрабатывает ((( тестовая строка не изменилась на выходе
PM MAIL   Вверх
Evghenusi
Дата 27.7.2011, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 1
Всего: 15



всё отрабатывает. я просто тестировал на онлайн сервисе, а им не всегда можно верить)
Код

    str = "<td style=\"height: 20%\" rowspan=\"3\">1</td><td style=\"width: 50%\" colspan=\"2\">3</td>";
    myRe=/<(\w+).*?( (?:rowspan|colspan)=\"\d+\")?>/gi;
    str = str.replace(myRe, '<$1$2>');
    alert(str);

убрал лишние бэкслэши, и вуаля

Это сообщение отредактировал(а) Evghenusi - 27.7.2011, 11:54
PM WWW   Вверх
Frozen_Coyote
Дата 27.7.2011, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 20.9.2007

Репутация: нет
Всего: нет



Я немного неверно сформулировал. Смысл в том, что отрабатывает верно, если colspan и rowspan присуствуют в теге.. а если этих параметров нет - то и тег не очищается - все стили остаются (( а задача у меня такая чтобы стили вычищались по любому, независимо от ого, есть ли colspan или rowspan или нет
PM MAIL   Вверх
Evghenusi
Дата 27.7.2011, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 1
Всего: 15



ниХе не понял, 
Цитата

а задача у меня такая чтобы стили вычищались по любому, независимо от ого, есть ли colspan или rowspan или нет 
так и работает.

покажите текст который у вас есть, и что вы хотите получить.
PM WWW   Вверх
Frozen_Coyote
Дата 27.7.2011, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 20.9.2007

Репутация: нет
Всего: нет



Ваш код отрабатывает хорошо только если базовая строка именно в таком вот виде.

а попробуйте допустим rowspan="3" перенести ПЕРЕД style="" - уже не отрабатывает

я немного конец модифицировал выражения, вместо ? написал .+? - тогда перестановка неважна, НО тогда и теги БЕЗ rowspan и colspan перестает чистить. Вот я про что smile

Это сообщение отредактировал(а) Frozen_Coyote - 27.7.2011, 12:19
PM MAIL   Вверх
Evghenusi
Дата 27.7.2011, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 1
Всего: 15



Цитата
вместо ? написал .+?
метасимвол ? сам по себе тоже несёт смысл. если уж модифицировать то ?.+?

исправить регулярку у меня не получается, придётся ждать следующего кто решит помочь  smile 
PM WWW   Вверх
Frozen_Coyote
Дата 27.7.2011, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 20.9.2007

Репутация: нет
Всего: нет



В любом случае огромное спасибо за участие
PM MAIL   Вверх
Frozen_Coyote
Дата 1.8.2011, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 20.9.2007

Репутация: нет
Всего: нет



Ну что, господа - никто не сможет помочь? я уже мозг се свернул (((
PM MAIL   Вверх
Frozen_Coyote
Дата 2.8.2011, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 20.9.2007

Репутация: нет
Всего: нет



Кому интересно, КАК smile

что то типа такого!

Код

    function work_fun(match)
    {
        str = match;

        //НАХОДИМ ТЭГ
        reg = /<(\w+)\s(.*?)>/gi;
        tag = str.replace(reg, "$1")

        //НАХОИМ ROWSPAN
        reg = /(rowspan="(.*?)")/gi;
        if(str.match(reg) != null)
        var rs = " " + str.match(reg) + " ";
        else
        var rs = "";

        //НАХОИМ COLSPAN
        reg = /(colspan="(.*?)")/gi;
        if(str.match(reg) != null)
        var cs = " " + str.match(reg) + " ";
        else
        var cs = "";

        return "<" + tag + rs + cs + ">";
    }


    str = "<b >Начало текста</b><table ><tr><td  style=\"height: 20%\" rowspan=\"3\" >1</td><td colspan=\"2\" style=\"width: 50%\"  rowspan=\"5\">3</td><td style=\"width: 50%\">4</td></tr></table><i>Конец текста</i>";

    reg = /<(\w+)\s(.*?)>/gi;
    clear_res = str.replace(reg, work_fun);

    alert(clear_res)

PM MAIL   Вверх
Evghenusi
Дата 3.9.2011, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 1
Всего: 15



эээх, не там спрашивали  smile 
http://forum.vingrad.ru/forum/topic-337373.html

от alezzz
Код
myRe=/(?<=<td)((?:\s+(?:colspan|rowspan)="[^"]+")*)\s+\w+="[^"]+"/gi;
str = str.replace(myRe, '$1');

PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.