2012-03-14 85 views
1

我想捕獲一個組,但同時忽略子組但需要該子組才能捕獲它。例如:正則表達式忽略捕獲組內的捕獲組

/^(?:\s*)([abc])?(?:\s*)((?:d){1}[ef]*)(.*)/.exec(' a deee ghi') 
// is equal to    [" a deee ghi", "a", "deee", " ghi"] 
// but I really want equal to [" a deee ghi", "a", "eee", " ghi"] 

// and I want this to fail: 
/^(?:\s*)([abc])?(?:\s*)((?:d){1}[ef]*)(.*)/.exec(' a eee ghi') 
//       [" a eee ghi", "a", "", "eee ghi"] 

我試圖忽視捕獲組在'd'但只希望它捕捉到,如果有第三組

我怎麼會做是之前任何'e' S的'f''d'這個?

編輯:

要clairify,我只希望如果有字符串有一個'd'第三組需填補。其他 - >不捕捉'e' S或'f'小號

回答

3

如果我理解正確:如果d是存在的,那麼捕獲組應該是eee,但如果d不存在,那麼捕獲 - 組應該是空的或空的。那是對的嗎?如果是這樣,你可以寫:

/^(?:\s*)([abc])?(?:\s*)(?:d([ef]*)|[ef]*)(.*)/.exec(' a deee ghi') 

匹配([ef]*)d存在,並且[ef]*當它不是。