如何使用正则表达式从istanbul text-summary报告器中提取测试覆盖率?

vkj*_*fef 11 javascript regex code-coverage gitlab istanbul

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)
Run Code Online (Sandbox Code Playgroud)

这突出了该部分Statements : 53.07%(见这里:http://regexr.com/3e9sl).但是,我只需匹配53.07部分,我该怎么做?

Wik*_*żew 15

我需要只匹配53.07部分,

使用延迟.*?,添加(?:\.\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);
Run Code Online (Sandbox Code Playgroud)

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

图案说明:

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

请参阅正则表达式演示.