以下正则表达式:
(\d+\.?\d+?)px \/\* (\d+) \*\/
匹配5.5px /* 1440 */
:
position: relative;
padding: 5.5px /* 1440 */ 9px /* 1440 */;
border: 0;
但不是9px /* 1440 */
。
这个正则表达式确实匹配5.5px /* 1440 */
和9px /* 1440 */
,但捕获了我不想捕获的组。
(\d+(\.)?(\d+)?)px \/\* (\d+) \*\/
如何在不抓取(\d+(\.)?(\d+)?)px \/\* (\d+) \*\/
和(\.)
的情况下撰写(\d+)
?
答案 0 :(得分:2)
\d+?
是\d+
的懒惰版本,不是可选的\d+
。
相反,*
量词意味着0或更多。
您还可以使用(?:…)
非捕获语法。
答案 1 :(得分:2)
根据我原来的评论......
你的正则表达式是:
\d+
匹配任何数字一次或多次\.?
匹配点字符.
字面上为零或一次\d+?
匹配一个或多个数字,但尽可能少(延迟量词)。实际上,错误位于最后一行,将+?
更改为*
应该可以解决您的问题,但是,以下方法通常被认为是捕获小数点数的更好方法,因为它没有& #39; t允许你的正则表达式捕获以小数点结尾的数字而不跟随它的数字(即10.
- 这将与\d+\.?\d*
匹配,但\d+(?:\.\d+)?
不会匹配
(\d+(?:\.\d+)?)px \/\* (\d+) \*\/
上面的正则表达式使用\d+(?:\.\d+)?
\d+
匹配一个或多个数字(?:\.\d+)?
匹配以下零次或一次
\.
字面匹配点字符.
\d+
匹配一个或多个数字