Javascript正则表达式匹配()返回匹配的部分(子集)

Mar*_*ins 1 javascript regex

我正在使用这个JavaScript正则表达式:

var e = new RegExp('(, )?wortel')

所以我的目标是匹配"wortel"OR ", wortel",因此将","封装在括号中并使用问号来表示一次或零次出现.

但是当我执行这行代码时:

'pus, wortel'.match(e)
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

Array [ ", wortel", ", " ]
Run Code Online (Sandbox Code Playgroud)

为什么第二个结果(", ")包含在比赛中?我的正则表达式不需要"wortel"这个词吗?我如何实现我想要的正则表达式规范?

PS我习惯使用Ruby正则表达式,因此解释这些差异可能会有所帮助

anu*_*ava 5

这是因为正则表达式中的可选捕获组:

var e = new RegExp('(, )?wortel');
Run Code Online (Sandbox Code Playgroud)

您可以", "通过使用具有(?:...)语法的非捕获组来避免捕获:

var e = new RegExp('(?:, )?wortel');
Run Code Online (Sandbox Code Playgroud)

(?:, )?使得它成为非捕获组.

现在结果将只是一个元素:

Array [ ", wortel" ]
Run Code Online (Sandbox Code Playgroud)

  • `g`标志也会......"/(,)?wortel/g` ....但我更喜欢你的解决方案 (2认同)