如何在此示例中使用非捕获组

时间:2017-11-14 16:47:17

标签: regex

以下正则表达式:

(\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+)

2 个答案:

答案 0 :(得分:2)

\d+?\d+的懒惰版本,不是可选的\d+

相反,*量词意味着0或更多。

您还可以使用(?:…)非捕获语法。

答案 1 :(得分:2)

根据我原来的评论......

你的正则表达式是:

  • \d+匹配任何数字一次或多次
  • \.?匹配点字符.字面上为零或一次
  • \d+?匹配一个或多个数字,但尽可能少(延迟量词)。

实际上,错误位于最后一行,将+?更改为*应该可以解决您的问题,但是,以下方法通常被认为是捕获小数点数的更好方法,因为它没有& #39; t允许你的正则表达式捕获以小数点结尾的数字而不跟随它的数字(即10. - 这将与\d+\.?\d*匹配,但\d+(?:\.\d+)?不会匹配

代码

See regex in use here

(\d+(?:\.\d+)?)px \/\* (\d+) \*\/

上面的正则表达式使用\d+(?:\.\d+)?

说明

  • \d+匹配一个或多个数字
  • (?:\.\d+)?匹配以下零次或一次
    • \.字面匹配点字符.
    • \d+匹配一个或多个数字