RegExp:如何删除字符串中的前导组和尾随组(如果存在)

RegExp:如何删除字符串中的前导组和尾随组(如果存在),regex,Regex,我正在对一个长字符串执行一个正则表达式,捕获其中的一部分。 其中一部分位于引号之间,可以有任意数量的子部分由斜杠分隔,例如: 'george' 'paul/john' 'john/peter/charles' ... 子部分未知,可以是任何顺序 我需要检索引号之间的字符串,但我也希望能够在执行时删除不需要的前导组和尾随组 例如,如果字符串以bruce或bongo开头,我想删除它 'bruce/peter/marc' -> peter/marc 'bongo/bob/kevin/

我正在对一个长字符串执行一个正则表达式,捕获其中的一部分。 其中一部分位于引号之间,可以有任意数量的子部分由斜杠分隔,例如:

'george'
'paul/john'
'john/peter/charles'
...
子部分未知,可以是任何顺序

我需要检索引号之间的字符串,但我也希望能够在执行时删除不需要的前导组和尾随组

例如,如果字符串以bruce或bongo开头,我想删除它

'bruce/peter/marc'      -> peter/marc
'bongo/bob/kevin/chris' -> bob/kevin/chris
但是,如果字符串以任何其他内容开头,那么我希望保留它

'alfie/george/paul'         -> alfie/george/paul
组中每次只能出现一个单词,在上面的示例中,开头只能出现bruce或bongo

为此,我成功地使用了以下正则表达式:

/'(?:bruce|bongo|)\/?([^']+)'/
以类似的方式,我希望删除一个尾随组。
假设如果字符串以sam或mark结尾,我也想删除此部分,例如:

'emily/grace/poppy/sam' -> emily/grace/poppy
'connor/barnaby/mark' -> connor/barnaby
同样,组中只有一个单词可以出现在末尾,在本例中,只有sam或mark可以结束字符串

我想使用与上述相同的方法,并使用类似的方法:

/'(?:bruce|bongo|)\/?([^']+)(?:sam|mark|)'/
但它不起作用:布鲁斯或邦戈在场时被移除,而萨姆或马克在场时总是被保留

我知道我可以按原样提取匹配项,并使用字符串操作方法将其删除。我目前正在使用javascript,我可以使用:

"bruce/john/charles/sam".replace(/^(?:bruce|bongo)\//, '').replace(/\/(?:sam|mark)$/, '');
但是我想知道是否有一种方法可以直接使用我对长原始字符串执行的初始正则表达式来实现相同的结果


我缺少什么?

您只需在
+
之后添加一个
,使中间部分变懒即可:

'(?:bruce|bongo|)\/?([^']+?)(?:sam|mark|)'
如果您希望捕获组排除在
sam
标记之前出现的
/
,则:

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

不要使用环视器。您需要在匹配中包含前缀和后缀,以便替换它们。