首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JavaScript通过多条线获得最近的匹配

使用JavaScript通过多条线获得最近的匹配
EN

Stack Overflow用户
提问于 2016-12-29 09:54:37
回答 1查看 94关注 0票数 2

下面是Protractor测试的输出,我试图解析并查找失败规范的名称:

代码语言: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

我使用的是以下正则表达式:

代码语言:javascript
复制
(?:Specs:)(?:[\s\S])*(?=UnknownError(.*?))

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

我怎样才能避免吞咽和狭窄的匹配,让它像:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-29 09:59:01

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

你可以用

代码语言:javascript
复制
/^Specs:(?:(?!^Specs:)[\s\S])*UnknownError:\s*(.*)/gm

或其更有效的展开变体:

代码语言:javascript
复制
/^Specs:.*(?:\r?\n(?!Specs:).*)*UnknownError:\s*(.*)/gm

regex演示

详细信息

  • ^ -行的开始
  • Specs: -一个文字字符的序列
  • (?:(?!^Specs:)[\s\S])* -一个经过调整的贪婪令牌,匹配没有启动行启动序列的任何字符,Specs: (在展开的变量中,.*(?:\r?\n(?!Specs:).*)*子模式也是这样做的)
  • UnknownError: -a子字符串
  • \s* - 0+白空间
  • (.*) -组1捕获除换行字符以外的任何零或多个字符。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41377196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档