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

时间:2014-10-13 10:10:55

标签: javascript regex

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

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

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

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

'pus, wortel'.match(e)

我得到了这个输出:

Array [ ", wortel", ", " ]

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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

此处(?:, )?使其成为非捕获组。

现在结果只是一个元素:

Array [ ", wortel" ]