2016-12-29 100 views
2

我有以下从量角器测试输出,我试图分析并找出失败的规范的名称:找最接近的匹配使用JavaScript

Specs: /var/lib/jenkins-slave/workspace//tests/js/e2e/ui_e2e/tests/test_one.js 
Selenium URL: http://10.20.40.54:4444/wd/hub 

..... number of different strings here.... 

Executed 25 of 25 specs SUCCESS in 1 min 23 secs. 
----- 
Specs: /var/lib/jenkins-slave/workspace//tests/js/e2e/ui_e2e/tests/test_two.js 

..... number of different strings here.... 

UnknownError: Due to a previous error, this job has already finished. You can learn more at 

我使用正则表达式如下:

(?:Specs:)(?:[\s\S])*(?=UnknownError(.*?)) 

但是,它与第一个字符串匹配得太宽,吞下字符串test_two.js

如何避免吞咽和狭窄的比赛有它喜欢:

Specs: /var/lib/jenkins-slave/workspace//tests/js/e2e/ui_e2e/tests/test_two.js 

..... number of different strings here.... 

UnknownError: Due to a previous error, this job has already finished. You can learn more at 
+0

我认为你不是在寻找一个“最接近”的匹配,而是在开始和结束分隔符之间最短的“窗口”。 –

回答

2

我觉得你是不是在找一个“最近”的比赛,但对于起始和结束分隔符之间最短的“窗口” 。

您可以使用

/^Specs:(?:(?!^Specs:)[\s\S])*UnknownError:\s*(.*)/gm 

或其更有效展开的变种:

/^Specs:.*(?:\r?\n(?!Specs:).*)*UnknownError:\s*(.*)/gm 

regex demo

详细

  • ^ - 字面字符
  • 序列
  • (?:(?!^Specs:)[\s\S])* - - 线
  • Specs:开始回火贪婪令牌匹配任何字符不启动的线开始的序列,Specs:(在展开的变型中,相同的是一个子
  • \s* - - 0+空格
  • (.*) - 第1组捕获比换行符字符以外的任何零个或多个字符与.*(?:\r?\n(?!Specs:).*)*子模式)
  • UnknownError:完成。
+1

谢谢你Wiktor,它很好用! –