我正在尝试捕获一个组,但同时忽略一个子组但需要该子组才能捕获它。例如:
/^(?:\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
答案 0 :(得分:3)
如果我理解正确:如果d
存在,则捕获组应为eee
,但如果d
不存在,则捕获组应该为空或空。那是对的吗?如果是这样,你可以写:
/^(?:\s*)([abc])?(?:\s*)(?:d([ef]*)|[ef]*)(.*)/.exec(' a deee ghi')
在([ef]*)
出现时与d
匹配,在[ef]*
出现时与{{1}}匹配。