我正在 try catch 一个组,但同时忽略了一个子组,但需要子组为真才能捕获它。例如:
/^(?:\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' 之前有一个
第三组中的 'd'
时捕获它'f'
我该怎么做?
编辑:
为了澄清,我希望仅当字符串中有 'd'
时才填充第三组。 else -> 不要捕获 'e'
或 'f'
最佳答案
如果我理解正确的话:如果 d
在那里,那么捕获组应该是 eee
,但是如果 d
是不存在,则捕获组应为空白或 null。那是对的吗?如果是这样,你可以写:
/^(?:\s*)([abc])?(?:\s*)(?:d([ef]*)|[ef]*)(.*)/.exec(' a deee ghi')
当 d
存在时匹配 ([ef]*)
,当它不存在时匹配 [ef]*
。
关于javascript - 正则表达式忽略捕获组内的捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9708053/