удалить определенные правила из встроенного CSS - PullRequest
1 голос
/ 26 ноября 2009

Я хотел бы удалить некоторые определенные правила CSS (например, ширину и высоту) из атрибутов встроенного стиля.

, поэтому я хочу преобразовать следующее:

<table id="foo" style="border:1px #000 solid; width: 100px; height: 100px;">

в

<table id="foo" style="border:1px #000 solid">

Есть ли удобное регулярное выражение, которое решает мою проблему?

спасибо всем заранее

Ответы [ 5 ]

0 голосов
/ 26 ноября 2009

Осторожно: регулярные выражения не могут правильно анализировать HTML.

Вместо этого используйте парсер.

#! /usr/bin/perl

use warnings;
use strict;

use HTML::Parser;

die "Usage: $0 html-file\n" unless @ARGV == 1;

sub start {
  my($tag,$attr,$attrseq,$text,$skipped) = @_;

  print $skipped;
  unless ($attr->{style} && $attr->{style} =~ /width|height/) {
    print $text;
    return;
  }

  my %style = $attr->{style} =~ /
    \s*      # optional leading space
    (.+?) :  # property, e.g., width
    \s*      # optional separating space
    ([^;]+)  # value, e.g., 100px
    ;?       # optional separator
  /gx;

  delete @style{qw/ width height /};
  $attr->{style} = join "; " =>
                   map "$_: $style{$_}",
                   keys %style;

  print "<$tag ",
          join(" " => map qq[$_="$attr->{$_}"], @$attrseq),
        ">";
}

my $p = HTML::Parser->new(
  api_version => 3,
  marked_sections => 1,
  start_h => [ \&start => "tag, attr, attrseq, text, skipped_text" ],
  end_h => [ sub { print @_ } => "skipped_text, text" ],
);

undef $/;
$p->parse(<>);
0 голосов
/ 26 ноября 2009

Возможно попробуйте это (проверено в Vim и Ruby):

/(width|height):\s*\d+(px|%);?//

Конечно, вы должны использовать синтаксис вашего редактора (или языка) для регулярных выражений (например, в Vim вы должны ставить обратную косую черту перед '(', '|', ')' и '+'

0 голосов
/ 26 ноября 2009

Нет, вы обычно не можете делать все это в регулярном выражении, потому что HTML не является регулярным языком.

Используйте анализатор HTML для получения атрибута style из тегов table, затем используйте регулярные выражения width:.+?(;|$) и height:.+?(;|$).

0 голосов
/ 26 ноября 2009

Включите поиск регулярных выражений в вашем редакторе и попробуйте:

width="[^"]*"
height="[^"]*"
0 голосов
/ 26 ноября 2009

Ваш вопрос не очень конкретный, но как насчет /[\s;"']width: .+;/. Вам нужно передать это в функцию замены или что-то еще, но я не могу вам помочь, потому что я не знаю, на каком языке вы говорите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...