Ich versuche, ein Ruby-Skript zu schreiben, das alle Rem-Werte in einer CSS-Datei durch ihre px-Entsprechungen ersetzt.Wie reguliere ich eine unbekannte Anzahl von sich wiederholenden Elementen?
body{font-size:1.6rem;margin:4rem 7rem;}
Der Match Ich mag würde zu bekommen wäre: Dies wäre ein Beispiel CSS-Datei
# Match 1 Match 2
# 1. font-size 1. margin
# 2. 1.6 2. 4
# 3. 7
aber ich völlig ahnungslos bin, wie mehrere und unterschiedliche Match Ergebnisse zu erhalten. Die RegEx, die mich bekam am nächsten ist dies (you can also take a look at it at Rubular):
/([^}{;]+):\s*([0-9.]+?)rem(?=\s*;|\s*})/i
Dies wird einzelne Instanzen Wert Erklärungen entsprechen (so wird es das gewünschte Spiel 1 Ergebnis richtig zurück), aber völlig außer Acht lässt Multiples.
Ich habe auch etwas nach dem Vorbild von ([0-9.]+?rem\s*)+
versucht, aber das hat nicht das gewünschte Ergebnis zurückgegeben, und ich habe nicht das Gefühl, dass ich auf dem richtigen Weg bin, da es nicht mehrere Ergebnisdatensätze zurückgibt.
EDIT Nach den Vorschlägen in den Antworten, endete ich das Problem, wie diese Lösung bis:
# search for any declarations that contain rem unit values and modify blockwise
@output.gsub!(/([^ }{;]+):\s*([^}{;]*[0-9.]rem+[^;]*)(?=\s*;|\s*})/i) do |match|
# search for any single rem value
string = match.gsub(/([0-9.]+)rem/i) do |value|
# convert the rem value to px by multiplying by 10 (this is not universal!)
value = sprintf('%g', Regexp.last_match[1].to_f * 10).to_s + 'px'
end
string += ';' + match # append the original match result to the replacement
match = string # overwrite the matched result
end
Versuch '(\ s * [\ w- ] *:)? ([\ d.] *) rem/g' –
@MartinDabbelJuSmelter: Ruby hat keine globale 'g' Option. – TheThirdMan