正则表达式忽略捕获组内的捕获组

时间:2012-03-14 18:38:04

标签: javascript regex

我正在尝试捕获一个组,但同时忽略一个子组但需要该子组才能捕获它。例如:

/^(?:\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',但只想在第三个'd''e'之前'f'被捕获组

我该怎么做?

编辑:

为了进行侮辱,我希望只有在字符串中有'd'时才填充第三组。别的 - >不要捕获'e''f' s

1 个答案:

答案 0 :(得分:3)

如果我理解正确:如果d存在,则捕获组应为eee,但如果d不存在,则捕获组应该为空或空。那是对的吗?如果是这样,你可以写:

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

([ef]*)出现时与d匹配,在[ef]*出现时与{{1}}匹配。