2012-04-13 14 views
3

只是想知道如果任何人有試過&測試正則表達式來解析CSS字體串到它的各個部分:正則表達式來解析任何CSS字體

  • 12px的宋體
  • 粗斜體無襯線
  • 12像素/ 50px verdana
  • etc
+0

的可能重複[如何解析CSS字體速記格式( http://stackoverflow.com/questions/5618676/how-to-parse-css-font-shorthand-format) – stema 2012-04-13 05:57:16

回答

7

回答我的問題:

/^\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 

分開來:

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] 
    ; 

是的,我知道這是瘋狂

+0

我不是爲你寫那個野獸,但是我會回頭看看那些像大小單位一樣重複的東西來修剪它。 – 2012-04-13 06:32:16

+0

@ErikReppen - 我不認爲我可以壓縮它比已經多:)大小單位不能被反引用,因爲'12px/30em verdana'完全有效。 – 2012-04-13 06:42:05

+0

@ErikReppen - 從頭開始​​,爲前3個道具添加後退引用:) – 2012-04-13 06:46:25

3

你的意思是這樣的?

How to parse CSS font shorthand format

另外,還有JSCSSP,一個JavaScript庫,用於解析CSS。

+0

不能使用接受的答案,因爲這段代碼在node.js中運行有時候不能使用DOM -parsing。進一步下來的答案可能會起作用,需要進行測試。 – 2012-04-13 05:41:57