下面是Protractor测试的输出,我试图解析并查找失败规范的名称:
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发布于 2016-12-29 09:59:01
我认为您不是在寻找“最近的”匹配,而是在开始和结束分隔符之间寻找最短的“窗口”。
你可以用
/^Specs:(?:(?!^Specs:)[\s\S])*UnknownError:\s*(.*)/gm或其更有效的展开变体:
/^Specs:.*(?:\r?\n(?!Specs:).*)*UnknownError:\s*(.*)/gm详细信息
^ -行的开始Specs: -一个文字字符的序列(?:(?!^Specs:)[\s\S])* -一个经过调整的贪婪令牌,匹配没有启动行启动序列的任何字符,Specs: (在展开的变量中,.*(?:\r?\n(?!Specs:).*)*子模式也是这样做的)UnknownError: -a子字符串\s* - 0+白空间(.*) -组1捕获除换行字符以外的任何零或多个字符。https://stackoverflow.com/questions/41377196
复制相似问题