2017-02-09 53 views
0

我對長字符串執行正則表達式,捕獲它的一部分。 該部分的一個是引號之間,它可以具有任何數量的由斜線分隔子部分,如:正則表達式:如何刪除前導和尾隨組(如果存在於字符串中)

'george' 
'paul/john' 
'john/peter/charles' 
... 

所述子部分是未知的,並且可以是任何順序。

我需要檢索引號之間的字符串,但也希望能夠在執行它時刪除不需要的前導和尾隨組。

例如,如果字符串與布魯斯或邦戈開始,我想刪除它

'bruce/peter/marc'  -> peter/marc 
'bongo/bob/kevin/chris' -> bob/kevin/chris 

但是,如果字符串與別的開始,然後我想保持它

'alfie/george/paul'   -> alfie/george/paul 

該組中只有一個詞可以出現在上面的例子中,只有布魯斯或邦戈可以出現在開頭。

要做到這一點我成功地使用以下正則表達式:

/'(?:bruce|bongo|)\/?([^']+)'/ 

以類似的方式,我想刪除尾隨組。
讓我們說,如果字符串與SAM結束或標記欲以及除去該部分,例如:

'emily/grace/poppy/sam' -> emily/grace/poppy 
'connor/barnaby/mark' -> connor/barnaby 

再次,只有一個組的字可以在端部存在,在示例中,只有sam或mark可以結束字符串。

我認爲使用上述相同和類似的東西去:

/'(?:bruce|bongo|)\/?([^']+)(?:sam|mark|)'/ 

但它不工作:如果存在布魯斯或邦戈被刪除,而SAM或標記(如果存在)始終保持。

我知道我可以提取匹配,因爲它是和字符串操作方法刪除它。我使用JavaScript的那一刻,我可以使用:

"bruce/john/charles/sam".replace(/^(?:bruce|bongo)\//, '').replace(/\/(?:sam|mark)$/, ''); 

但我不知道是否有一種方法來實現直接使用初始正則表達式我執行對長原始字符串相同的結果。

我缺少什麼?

+0

請勿使用環視圖。您需要在匹配中包含前綴和後綴,以便您可以替換它們。 – Barmar

回答

1

你必須讓中間部分懶,加入了?+

'(?:bruce|bongo|)\/?([^']+?)(?:sam|mark|)' 

如果你想捕捉小組,以排除sammark,那麼之前發生/

'(?:bruce|bongo|)\/?([^']+?)(?:\/sam|\/mark|)' 
+0

工作很好,謝謝! :) –

相關問題