Javascript 用于css字体声明的Regexp

Javascript 用于css字体声明的Regexp,javascript,css,regex,Javascript,Css,Regex,这是css中的字体声明: font: bold italic small-caps 1em/1.5em verdana,sans-serif; 这是一个regexp,用于获取px中的值: value.match(/(normal|italic)?\s*(normal|small-caps)?\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\s*(\d+)px(?:\/(normal|[\d\.]+))?\s

这是css中的字体声明:

font: bold italic small-caps 1em/1.5em verdana,sans-serif;
这是一个regexp,用于获取px中的值:

value.match(/(normal|italic)?\s*(normal|small-caps)?\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\s*(\d+)px(?:\/(normal|[\d\.]+))?\s+(.*)/);
并帮助我得到这个:

  var fontStyle = match[1],
       // font variant is not used
       // fontVariant = match[2],
       fontWeight = match[3],
       fontSize = match[4],
       lineHeight = match[5],
       fontFamily = match[6];
我想解析字体大小或线宽的任何值,不只是px,而是

[px|cm|mm|em|pt|pc|in]
但我不能修改它。 有人能帮忙吗

最终结果:

(normal|italic)?\s*(normal|small-caps)?\s*(normal|bold|bolder|lighter|100|200|30‌​0|400|500|600|700|800|900)?\s*(\d+(?:px|cm|mm|em|pt|pc|in)*)(?:\/(normal|[\d\.]+)‌​)?\s+(.*) 

只需使用以下命令更改正则表达式中的
px

(\d+(?:px|cm|mm|em|pt|pc|in|%))
注意括号


更新:该值现在也被捕获。

不要用regexp解析CSS。相反,让引擎来做吧——它已经知道怎么做了,完美

var elt=document.createElement('div');
elt.style.font='1em sans serif';
//现在可以通过elt.style.fontFamily等方式访问各个属性。
['fontFamily','fontSize'].forEach(函数(x){

document.writeln(x,“is”,elt.style[x],“;”})怎么办?好吧,用谷歌搜索一下。。。。5分钟后回来。现在我假装vw vh和rem不存在。我试着这么做,但它将测量单位识别为附加匹配。我希望它能匹配6px或5in作为一个单一匹配,而不是两个单独的匹配。谢谢大家,这是最适合我的。另一个是产生更多的结果,另一个是我自己做的(\d+em |\d+px |\d+cm |\d+)。。。。太难看了。感谢vw vh和%单位,但我放弃了它们。我在parentesis后面添加了一个星号,即使没有测量单位也可以接受。(正常|斜体)?\s*(正常|小大写)?\s*(正常|粗体|粗体|较轻| 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900)?\s*(\d+)(?:px | cm | mm | em | pt | pc | in)*(?:\/(正常|[\d\))两个组别在逻辑上都是圆的吗?这就是为什么我们使用“?:”意味着不捕获?@AndreaBogazzi:没错,
(?:…)
意味着一个非捕获组。感谢您的建议,我将提出它,但如果可能的话,我将跳过这个文档,因为在我的例子中,它是一个SVG,没有我需要的所有属性,或者它没有跨所有浏览器的属性。(nodejs,oldIE…我不是那么专业,改变意味着从头开始测试一切)