JS正则表达式匹配零个或多个可选的以关键字开头

JS regex match zero or more optional start with key words

给定字符串 keydown.capture.once.prevent.shift.control[arrowdown,arrowup]:silent 我想匹配 shift.control[arrowdown,arrowup]:silent

如果相同 keydown.capture.once.prevent.shift[arrowdown,arrowup]:silent 那么它应该匹配 shift[arrowdown,arrowup]:silent

这里是关键词 shift | control 可选,例如:keydown.capture.once.prevent.[arrowdown,arrowup]:silent,匹配字符串[arrowdown,arrowup]:silen

我写了下面的正则表达式,它只能捕获零个或一个关键字,但预期结果是零个或所有关键字匹配到单独的组

(shift|control)?\[(.*?)\]:silent,如果关键字存在,我们如何捕获所有关键字?

补充说明:关键字的顺序无关紧要,例如可以是 control.shift[]:silent

您可以使用以下任何一种正则表达式解决方案:

(?:(?:shift|control)\.?)*\[([^\]]*)\]:silent

这匹配 shift 或 control` 可选地后跟一个 dit 并重复这个 non-capture 组 0 次或更多次。

RegEx Demo

(?:shift(?:\.control)?|control(?:\.shift)?)?\[([^\]]*)\]:silent

这个匹配 shift.controlcontrol.shiftoptional non-capture 组中,点后的部分在每个交替中都是可选的。

RegEx Demo 2

你可以试试这个:

(?:(shift|control|shift\.control|control\.shift))?(\[.*\]):silent

测试并输出:https://regex101.com/r/rMSd2l/1