2016-09-23 9 views
6

Gitlab CI требует, чтобы вы указывали регулярное выражение для извлечения покрытия кода операторов (чтобы они могли отображать его). Учитывая результаты сборки ниже (с шуткой и Стамбулом), я сумел прийти, насколько: /Statements.*(\d+\%)/Как извлечь тестовое покрытие из рецензента-реферата по текстуре istanbul с регулярным выражением?

... (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, как мне это сделать?

ответ

8

Мне нужно, чтобы соответствовать только 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);

Обратите внимание, что Statements.*?(\d+(?:\.\d+)?)% также допускает целочисленные значения, а не только floa ц.

Описание Pattern:

  • Statements - это символьная строка
  • .*? - ноль или больше символов, кроме пробелов, но как можно
  • (\d+(?:\.\d+)?) - Группа 1 (значение вам нужно будут записаны в эту группу), фиксируя 1 + цифры и необязательную последовательность . и 1 + цифры после нее
  • % - знак процента (если вам нужно его распечатать, переместите его в скобках выше)

См. regex demo.

+0

Ах да, я вижу. Что сбивает с толку, так это то, что ваш шаблон подчеркивает то же, что и мой шаблон в regexr, но когда я наводил курсор на группу, он показывает, что он только захватил '53.07', поэтому он работает так, как должен, из того, что я могу сказать, правильно? – vkjb38sjhbv98h4jgvx98hah3fef

+0

Просто проверил это с gitlab, и я могу подтвердить, что он работает. Благодаря! – vkjb38sjhbv98h4jgvx98hah3fef

+0

Не обращайте внимания на то, что говорят онлайн-тестеры. Доверяйте, что вы получите в конце в * целевой среде *. –