2016-06-09 13 views
0

In meiner Vorlage (html.eex Datei) Ich möchte den Wert einer bestimmten CSS-Eigenschaft in einer Zeichenfolge mit mehreren CSS-Werten mit einem Regex erfassen. Ich denke, die Regex ist korrekt, aber ich bekomme einen Syntaxfehler.Verwenden von Regex zum Erfassen von Teilzeichenfolge nach einem Wort und vor einem anderen nicht funktioniert

Zum Beispiel den Wert des width in dieser Zeichenfolge zu erfassen (40):

A: "height: 35px; width: 40px; margin: 10px", 

Ich verwende:

<%= Regex.named_captures(~r/(?<=width:).*?(?=px)/, to_string @A) |> elem(0) %> 

und ich bin immer ein Argument Fehler.

+0

Ich fühle mich wie Sie besser dran Parsen der CSS sein würde, zum Beispiel ein einfacher Parser könnte unter Verwendung von kombinieren - https://github.com/bitwalker/combine –

+0

@ PawełObrok erstellt werden. Das wusste ich nicht. Es scheint wie eine Alternative. Ich werde es mir ansehen. Vielen Dank. –

Antwort

2

Sie könnten versuchen:

Regex.named_captures(~r/width: (?<width>.*)px/U, string) 
%{"width" => "40"} 

die U am Ende bedeutet nicht gierig, sonst ist es zurück:

Regex.named_captures(~r/width: (?<width>.*)px/, string) 
%{"width" => "40px; margin: 10"} 
+0

Ok. Jetzt kann ich den Wert ergreifen, aber ich erhalte einen Fehler: 'Protokoll Phoenix.HTML.Safe nicht für% {" Breite "=>" 40 "} implementiert' –

+0

Ja, weil es Karte anstelle der Zeichenkette zurückgibt. Sie müssen nur '[" width "]' anhängen, um den Wert zu extrahieren: 'Regex.named_captures (~ r/width: (? . *) Px/U, string) [" width "]' – tkowal

+0

Vielen Dank. Ich versuchte es mit '.width'insteady ... –

Verwandte Themen