2 Stimmen

Regex für die Ersetzung/Ergänzung von HTML-Attributen

Ich bin auf der Suche nach einer einzeiligen Regex, die das Folgende tut:

Bei einem HTML-Tag mit dem Attribut "name" möchte ich es durch mein eigenes Attribut ersetzen. Wenn dieser Tag kein Attribut "name" hat, möchte ich mein eigenes Attribut einfügen. Das Ergebnis sollte wie folgt aussehen:

<IMG name="img1" ...> => <IMG name="myImg1" ...>
<IMG ...> => <IMG name="myImg1" ...>

Kann dies mit einer einzeiligen Regex erledigt werden?

4voto

Alan Moore Punkte 70949

Der Trick besteht darin, jedes vollständige "Attribut=Wert"-Paar abzugleichen, aber erfassen nur die, deren Attributname nicht "name" ist. Dann fügen Sie Ihr eigenes Attribut "name" zusammen mit allen erfassten Attributen ein.

s/<IMG
  ((?:\s+(?!name\b)\w+="[^"]+")*)
  (?:\s+name="[^"]+")?
  ((?:\s+(?!name\b)\w+="[^"]+")*)
  >
 /<IMG name="myName"$1$2>
 /xg;

1voto

Sean Punkte 1955

Dies ist keine perfekte Lösung, der Abstand und die Position innerhalb des Tags sind vielleicht nicht genau das, was Sie wollen, aber es erfüllt die Ziele. Dies ist mit einem Perl Regex, aber es gibt nichts besonderes Perl-spezifische über sie.

s/(&lt;IMG)((\s+[^&gt;]*)name="[^"]*")?(.*)/$1$3 name="myID"$4/g

0voto

Tim Pietzcker Punkte 311448

Wenn, wie in Ihrem Beispiel, das Attribut name immer das erste innerhalb des IMG-Tags ist, dann ist es sehr einfach. Suchen Sie nach

<(?!/)(/w+)\s+(name="[^"]+")?

und ersetzen durch

<\1 name="myImg1"

aber ich bezweifle, dass Sie das wirklich wollen.

Wenn das Attribut name an anderen Stellen vorkommen kann, wird es schwieriger.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X