2010-07-28 69 views
2

我想从字符串中提取CSS位置结束 - 例如:正则表达式匹配浮点数不

"top left bottom right center 0 0% 50% 100% 360deg 15.5% -16.3%" 

的问题是,该字符串还包含一个角度“360deg”。我不希望任何数字后跟“deg”以便与正则表达式匹配。目前,我有:

(-?([0-9]*\.[0-9]+|[0-9]+))|(center)|(top)|(left)|(bottom)|(right) 

这所有的数字(增量的角度 - 这是我不想要的。)相匹配。我已经使用负先行尝试:

(-?([0-9]*\.[0-9]+|[0-9]+))(?!deg)|(center)|(top)|(left)|(bottom)|(right) 

但这似乎只删除360deg结束零 - 即360deg => 36

有谁知道为什么负前瞻不能成功地消除了角?

回答

2

正则表达式匹配,因为它发现两个数字后面跟着“deg”:36后面跟着0,那不是“deg”。 [0-9]*通常是贪婪的,但如果这导致匹配失败,它会尝试选择匹配较少数字的替代品。

您可以排除模式改成这样:

(?!deg|[0-9.]) 
+0

那出色的作品。谢谢! – Homar 2010-07-28 18:40:20

0

尝试增加你的话boundry:

(-?([0-9]*\.[0-9]+|[0-9]+)\b)|(center)|(top)|(left)|(bottom)|(right)