2012-10-14 54 views
0

下面是我有的示例字符串。獲取匹配行

143s: WHAT IS <span>THAT</span>? 144s: HEAR THAT? 152s: EVERYBODY, SHH. SHH. 156s: <span>STAY</span> UP THERE. 163s: [BOAT CREAKING] 165s: WHAT IS THAT? 167s: [SCREAMING] 191s: COME ON! 192s: OH, GOD! 193s: AAH! 249s: OK. WE'VE HAD SOME PROBLEMS 253s: AT THE FACILITY. 253s: WHAT WE'RE ATTEMPTING TO <span>ACHIEVE</span> 256s: HERE HAS <span>NEVER</span> BEEN DONE. 256s: WE'RE THIS CLOSE 259s: TO THE REACTIVATION 259s: OF A HUMAN BRAIN CELL. 260s: DOCTOR, THE 200 MILLION 264s: I'VE SUNK INTO THIS COMPANY 264s: IS DUE IN GREAT PART 266s: TO YOUR RESEARCH.

考慮,串ns:和文字,之後,作爲一個單一的線。

例如259s: OF A HUMAN BRAIN CELL.

我需要的正則表達式,返回我行有,

Previous Line of Line having span tag if any + Line having span tag + Next Line of having span tag if any 

所以上面的字符串應該返回我的3場比賽。

1st : 143s: WHAT IS <span>THAT</span>? 144s: HEAR THAT? 
2nd : 152s: EVERYBODY, SHH. SHH. 156s: <span>STAY</span> UP THERE. 163s: [BOAT CREAKING] 
3rd : 253s: WHAT WE'RE ATTEMPTING TO <span>ACHIEVE</span> 256s: HERE HAS <span>NEVER</span> BEEN DONE 
+2

你能否嘗試並解釋你用來分割線條的標準?我已閱讀並重新閱讀你的解釋,但我恐怕我沒有遵循。 –

+0

編程語言? – JDB

+0

我可以建議,如果這是'緊急',您是否試圖通過回答前面留言中留下的問題來幫助我們?目前,鑑於你缺乏迴應,我正在認真考慮關閉「不是真正的問題」。請幫助*我們*幫助*您*。 –

回答

1

「有上線...」是需要lookbehind,這是不被JS所支持的條件。但是,正則表達式會過於複雜,因此只需解析它並循環查看匹配的行。

var text = "…"; 

var lines = [], 
    textparts = text.split(/(\d+s:)/); 
for (var i=1; i<textparts.length; i+=2) 
    lines[(i-1)/2] = { 
     lineNumber: textparts[i].match(/\d+/)[0], 
     text: textparts[i+1], 
     hasSpan: /<span>/.test(textparts[i+1]) 
    }; 
var matchedlines = []; 
for (var i=0; i<lines.length; i++) 
    if (lines[i-1] && lines[i-1].hasSpan && lines[i].hasSpan && …) // or whatever 
     matchedlines.push(lines[i]); 
+0

謝謝@Bergi的回覆。我試圖使用下面的正則表達式來得到''。但我沒有成功做到這一點。你能幫我嗎!!?正則表達式:'\ b(\ d {1,4} s:(*。?))\ b(?=)' – meghana

+0

感謝@Bergi,再次爲您的更新。但我們已經嘗試過了。我們需要它在正則表達式 – meghana

+1

@meghana:這有什麼問題?爲什麼你的客戶堅持正則表達式?他們是這個錯誤的工具(或我不明白你的要求太好) – Bergi