2017-02-09 6 views
3

Ich habe gekämpft, um einen regulären Ausdruck zu finden, der in der "Test Coverage Parsing" Eingabe auf der "CI/CD Pipelines" Seite funktioniert. Es hilft nicht, dass die Beispiele inkonsistente Beispiele zeigen, d. H. Einige Escape-Klammern und andere nicht, gleiche mit Prozentsymbolen, einige erfassen das explizite Ergebnis in $1 usw. Wie auch immer, hier ist mein Text - was ist der Regex?Regex für Gitlab CI Test Coverage Parsing

CI-Abzeichen:

![coverage](https://gitlab.com/mycompany/master/badges/master/coverage.svg?job=coverage) 

Ausgabetext:

Unit test coverage: 
    10.01% blocks 
    10.01% lines 

bisher versucht: (hinzugefügt einfach die Schrägstriche den Raum auf der Vorderseite oder regex darstellen)

/ \(\d+\.\d+\%\) blocks/ 
/(\d+\.\d+\%) blocks/ 
/(\d+\.\d+%) blocks/ 
/(\d+\.\d+)% blocks/ 

Antwort

1

Diese Regex sollte die Blöcke Abdeckung greifen:

^\s*(\d+(?:\.\d+)?%)\s*blocks 

Wenn Sie die Zeile Abdeckung greifen wollen, anstatt dann verwenden:

^\s*(\d+(?:\.\d+)?%)\s*lines 

Gitlab fügt die Vorder- und Hinter / automatisch, so dass Sie sie zu Ihrem regex nicht hinzufügen müssen.

Für die Zukunft wird Gitlab in Ruby geschrieben, so können Sie bei rubular.com

+0

ich glaube, Sie es ein bisschen es flexibler verbessern, indem sie leicht - alle Leerzeichen entsprechen, anstatt nur Räume, die Leerzeichen optional machen (die „Blöcke“ oder „Linien“ Schlüsselwort ist, was zählt), den Dezimalpunkt verlassen und den Prozentwert ohne Dezimalstellen anzeigen. http://rubular.com/r/7m5Z48JRcQ – tmt

+0

@tmt Ich habe meine Antwort aktualisiert, um einige Ihrer Vorschläge zu verwenden. – BrokenBinary

+0

Dieser Regex hat nicht für mich funktioniert. Speziell was soll erfasst werden? Sollte es die Dezimalzahl sein, d. H. "10,01", oder der Prozentwert, d. H. "10,01%" oder etwas mehr? Die von @BrokenBinary bereitgestellte Regex verfügt über mehrere Captures. – Dan

0

Das Problem, dass die Abfrage Abdeckung URL war diesen regulären Ausdruck in Ruby über testen "? Job = coverage" falsch war. Was die Regex betrifft, habe ich verwendet:

\W(\d+(?:\.\d+)%)\sblocks