2012-04-13 14 views
3

einfach zu analysieren gefragt, ob jemand hat eine versucht & getestet regex eine CSS-Schriftzeichenfolge in seine verschiedenen Stücke zu analysieren:regex jede CSS Schrift

arial
  • 12px
  • kursiv fett serifenlose
  • 12px/50px verdana
  • etc
+0

möglich Duplikat ist [Wie CSS Schrift Stenografie-Format analysieren] (http://stackoverflow.com/questions/5618676/how-to-parse-css-font-shorthand-format) – stema

Antwort

7

meine eigene Frage zu beantworten:

/^\s*(?=(?:(?:[-a-z]+\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\1|\2|\3)\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\d]+(?:\%|in|[cem]m|ex|p[ctx]))(?:\s*\/\s*(normal|[.\d]+(?:\%|in|[cem]m|ex|p[ctx])))?\s*([-,\"\sa-z]+?)\s*$/i 

, die trennt:

var  parts = rx.exec(str) 
    , fontStyle = parts[1] || 'normal' 
    , fontVariant = parts[2] || 'normal' 
    , fontWeight = parts[3] || 'normal' 
    , fontSize = parts[4] 
    , lineHeight = parts[5] 
    , fontFamily = parts[6] 
    ; 

Und ja, erkenne ich, dass der wahnsinnige

+0

Ich schreibe dieses Biest nicht für dich, aber ich würde nach Hinweisen für Dinge suchen, die sich ähnlich wie die Größeneinheiten wiederholen, um es etwas zu reduzieren. –

+0

@ErikReppen - Ich glaube nicht, dass ich es viel mehr komprimieren kann, als es bereits ist :) Die Größeneinheiten können nicht zurückverlinkt werden, weil "12px/30em verdana" vollkommen gültig ist. –

+0

@ErikReppen - Scratch, die Rückreferenzen für die ersten 3 Requisiten hinzugefügt :) –

3

Sie wie das bedeuten?

How to parse CSS font shorthand format

Alternativ gibt es auch JSCSSP, eine JavaScript-Bibliothek für CSS Parsen.

+0

Kann die akzeptierte Antwort nicht verwenden, da dieser Code manchmal in node.js ausgeführt wird, so dass er nicht verwendet werden kann dom -Parsing. Die Antwort weiter unten könnte funktionieren, muss getestet werden. –