Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Регулярка на javascript свернула мозг :)
 
 автор: f_coyote   (01.08.2011 в 22:35)   письмо автору
 
 

Здравствуйте,

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

если в теге присуствует colspan="значение" или rowspan="значение" - эти параметры оставлять. Все остальное внутри любого тега должно быть убито. Всю голову сломал себе. Просто тег очистить от всего - не вопрос, но вот с такими нюансами - я залип ((

спасибо большое

  Ответить  
 
 автор: cheops   (02.08.2011 в 09:11)   письмо автору
 
   для: f_coyote   (01.08.2011 в 22:35)
 

Вы хотите решить эту проблему при помощи одного регулярного выражения? Или допускается использование нескольких?

  Ответить  
 
 автор: f_coyote   (02.08.2011 в 11:08)   письмо автору
 
   для: cheops   (02.08.2011 в 09:11)
 

Вы знаете - я интуитивно понимаю что ведь можно одним выражением это решить! Но, понятное дело, буду признателен за любое решение

  Ответить  
 
 автор: SHAman   (02.08.2011 в 12:46)   письмо автору
 
   для: f_coyote   (01.08.2011 в 22:35)
 

Лично я решал эту проблему так:
1) искал все атрибуты и заменял их на результат работы функции
2) функция проверяет есть ли среди атрибутов colspan или rowspan или и то и то. Если есть - запоминает значения.
3) заново формируется список атрибутов. Он либо пуст, либо содержит запомненные значения rowspan/colspan

Код приводить?

  Ответить  
 
 автор: f_coyote   (02.08.2011 в 12:53)   письмо автору
 
   для: SHAman   (02.08.2011 в 12:46)
 

Если не трудно - надо логику визуально понять.. спасибо!

  Ответить  
 
 автор: SHAman   (02.08.2011 в 12:57)   письмо автору
 
   для: f_coyote   (02.08.2011 в 12:53)
 

Происходит замена по регулярке:
$t =~ s/<td(.*?)>/del_atr_td($1)/igse;       #убиваем аттрибуты ячеек кроме colspan rowspan


Функция del_atr_td выглядит так:

sub del_atr_td    {
    my $atr = shift;
    my $res;
    if($atr =~ /^\s*$/)    {return '<td>';}
    if($atr !~ /colspan/ && $atr !~ /rowspan/)    {return '<td>';}
    my @colspan = $atr =~ /colspan=(['"])(.+?)\1/gi;
    my @rowspan = $atr =~ /rowspan=(['"])(.+?)\1/gi;
    my $ret;
    foreach my $span(@colspan)    {
        next if($span =~ /^['"]$/);
        $ret .= 'colspan="'.$span.'" ';
    }
    foreach my $span(@rowspan)    {
        next if($span =~ /^['"]$/);
        $ret .= 'rowspan="'.$span.'" ';
    }
    $ret =~ s/\s+$//;
    return "<td $ret>";
}


Она получает вообще все атрибуты тега. Потом ищет в них rowspan и colspan и запоминает. Если нашла что-то - формирует новый список атрибутов с запомненными значениями. Если не нашла - отдает пустоту.

  Ответить  
 
 автор: АЯ   (02.08.2011 в 13:56)   письмо автору
 
   для: SHAman   (02.08.2011 в 12:57)
 

SHAman - это всё красиво.
Но вопрос изначально был о регулярке в Jvascript, а не в PHP.

  Ответить  
 
 автор: SHAman   (02.08.2011 в 15:20)   письмо автору
 
   для: АЯ   (02.08.2011 в 13:56)
 

Это вообще Perl. Но разницы я не вижу. Синтаксис регулярок везде один. Привел свой код просто для иллюстрации логики. Кому надо - разберется. Реализовать такое на JS, даже просто переводя с Perl - дело 10 минут. Но мне этих минут жаль.

  Ответить  
 
 автор: sl1p   (02.08.2011 в 15:51)   письмо автору
 
   для: SHAman   (02.08.2011 в 15:20)
 

это дело 10 минут для того кто знаком с перлом.

  Ответить  
 
 автор: SHAman   (03.08.2011 в 10:32)   письмо автору
 
   для: sl1p   (02.08.2011 в 15:51)
 

Ну я не верю что вы не можете это перевести. Тут, конечно, особый синтаксис, но по-моему, даже если просто прочитать описание алгоритма и выдрать регулярки, можно понять что и как. Если нет, значит так надо)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования