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

标签 javascript regex

我正在 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/

相关文章:

javascript - 如何将选中的复选框附加到 html 表中列表的顶部?

javascript - 网站上的视频播放器

javascript - 在第二个连字符之前分割数据属性

javascript - 如何在 CSS 模块中使用全局父选择器

javascript - 在angularjs中获取从 View 到 Controller 的值

regex - 取消转义字符串中的 unicode

regex - 什么正则表达式将匹配所有环回地址?

javascript - 仅匹配最后一个破折号后的数字的正则表达式

python - findall 的完整表达式

javascript - 表单外部提交按钮的跨浏览器解决方案