如何使用正则表达式从伊斯坦布尔文本摘要记者中提取测试范围?

How do I extract test coverage from the istanbul text-summary reporter with a regex?

Gitlab CI 要求您指定一个正则表达式来提取语句代码覆盖率(以便他们可以显示它)。考虑到下面的构建输出(使用 jest 和 istanbul),我已经设法做到了:/Statements.*(\d+\%)/

... (other build output)
=============================== Coverage summary ===============================
Statements   : 53.07% ( 95/179 )
Branches     : 66.67% ( 28/42 )
Functions    : 30.99% ( 22/71 )
Lines        : 50.96% ( 80/157 )
================================================================================
... (other build output)

这会突出显示部分 Statements : 53.07%(请参阅此处:http://regexr.com/3e9sl)。但是,我只需要匹配 53.07 部分,我该怎么做?

I need to match only the 53.07 part,

使用惰性 .*?,添加 (?:\.\d+)? 也匹配浮点数,并访问捕获组:

var re = /Statements.*?(\d+(?:\.\d+)?)%/; 
var str = '... (other build output)\n=============================== Coverage summary ===============================\nStatements   : 53.07% ( 95/179 )\nBranches     : 66.67% ( 28/42 )\nFunctions    : 30.99% ( 22/71 )\nLines        : 50.96% ( 80/157 )\n================================================================================\n... (other build output)';
var res = (m = re.exec(str)) ? m[1] : "";
console.log(res);

请注意 Statements.*?(\d+(?:\.\d+)?)% 也允许整数值,而不仅仅是浮点数。

图案说明:

  • Statements - 文字字符串
  • .*? - 除空格外的零个或多个字符,但尽可能少
  • (\d+(?:\.\d+)?) - 第 1 组(您需要的值将被捕获到该组中)捕获 1+ 位数字和可选的 . 序列以及其后的 1+ 位数字
  • % - 百分号(如需打印,移至上方括号内)

参见regex demo