我正在使用此JavaScript正则表达式:


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

因此,我的目标是匹配"wortel"", wortel",从而将“,”封装在方括号中,并使用问号表示一个或零次出现。


但是,当我执行以下代码行时:

'pus, wortel'.match(e)


我得到以下输出:

Array [ ", wortel", ", " ]


为什么第二个结果(", ")被包含在比赛中?我的正则表达式不需要“ wortel”一词吗?以及如何达到所需的正则表达式规格?

PS我已经习惯了Ruby正则表达式,所以解释差异可能会有所帮助

最佳答案

这是由于正则表达式中的可选捕获组:

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


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

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


在这里(?:, )?使其成为非捕获组。

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

Array [ ", wortel" ]

09-30 16:00