2009-11-26 9 views
1

Je voudrais supprimer certaines règles css spécifiques (c'est-à-dire la largeur et la hauteur) des attributs de style en ligne.supprimer des règles spécifiques en ligne CSS

donc je veux transformer ce qui suit:

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

dans

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

est-il un regex pratique qui permet de résoudre mon problème?

vous remercie tous à l'avance

+1

's /; largeur: 100px; hauteur: 100px; // g'. Sérieusement, pourquoi ne lisez-vous pas les documents regex de votre langue? Les expressions régulières ne sont pas une sorte de poussière de fée que vous utilisez sur votre code pour le rendre "magique". (Hm, j'ai dit tout à fait la même chose à propos de jQuery il y a un petit moment.) – Boldewyn

Répondre

0

Peut-être essayer ceci (testé dans vim et Ruby):

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

Bien sûr, vous devez utiliser votre éditeur de syntaxe (ou de la langue) pour les regexps (par exemple dans Vim vous devez ajouter une barre oblique inverse avant '(', '|', ')' et '+'

0

Votre question est pas très précis, mais que diriez-vous /[\s;"']width: .+;/. Vous devez le faire pour une fonction de remplacement ou quelque chose, mais je ne peux pas vous aider parce que je ne sais pas dans quelle langue vous êtes.

+0

merci, mais cela ne trouverait que la règle de la largeur. Je veux le retirer du

-tag afin que seules les autres règles restent dans l'attribut style – aeno

+0

Vous aurez probablement besoin d'une sorte de vérification des limites au début du motif. Sinon, un motif pour supprimer les règles 'height' gâchera les règles' line-height' ... –

+0

Élargi la réponse en réponse aux commentaires ci-dessus –

0

Non, vous ne pouvez généralement pas faire tout cela dans une expression régulière, parce que HTML n'est pas une langue régulière.

Utilisez un analyseur HTML pour obtenir à l'style attribut de table balises, puis utilisez les expressions régulières width:.+?(;|$) et height:.+?(;|$).

+0

'' Si la largeur est le dernier élément, il ne doit pas nécessairement se terminer par un point-virgule. droite? '' – Amarghosh

+0

Fixé. (Les commentaires ont besoin d'au moins 15 caractères) – Svante

0

Activer la recherche regex dans votre éditeur et essayer:

width="[^"]*" 
height="[^"]*" 
0

Attention: les expressions régulières ne peuvent pas analyser correctement le code HTML

Utilisez plutôt un analyseur.

#! /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(<>); 
Questions connexes