2015-08-20 51 views
4

匹配詞語我有這樣正則表達式與條件

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,但並不如預期。誰可以幫我這個事?

回答

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

您可以使用lookahead來做到這一點。

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

+0

這就是我正在尋找的。謝謝 – Exception

+1

lookahead的想法很好。我喜歡它。 – Exception

+0

我在等待10分鐘完成接受。當時我檢查它是54秒剩餘:) – Exception