我有这样的字符串

var msg = "ATEAM-3121 ATEAM-31 123 ATEAM-32 #finish \n ATEAM-3211 \n ATEAM-51 ATEAM-52 ATEAM-53 12345677 #finish ATEAM-1000";

在上面的字符串中,对于每行,我想在#finish标记之前匹配与ATEAM- [0-9] *相匹配的标记。如果任何行没有#finish,则应忽略所有ATEAM标签。

这是有效的非正则表达式解决方案
msg = msg.split("\n");
var tickets = [];
msg.forEach(function(val) {
  var ticks = val.split(' ');
  for(var i = ticks.indexOf('#finish'); i >= 0; i-- ) {
    if(ticks[i].match(/^ATEAM-.*$/)) {
      tickets.push(ticks[i]);
    }
  }
});
console.log(tickets);

但是想将其转换为正则表达式解决方案,这就是我尝试过的
msg.match(/(ATEAM-[0-9]*|\#finish)/g);

但这给了我类似于fiddle的结果,但是却没有达到预期的效果。谁可以帮我这个事?

最佳答案

ATEAM-[0-9]+(?=.*?#finish)

您可以使用lookahead进行此操作。请参见演示。

https://regex101.com/r/uF4oY4/88

10-04 11:43