我正在使用这个JavaScript正则表达式:
var e = new RegExp('(, )?wortel')
所以我的目标是匹配"wortel"
或", wortel"
,从而将","封装在括号中并使用问号表示一次或零次出现。
但是当我执行这行代码时:
'pus, wortel'.match(e)
我得到了这个输出:
Array [ ", wortel", ", " ]
为什么第二个结果(", "
)包含在比赛中?我的正则表达式是否不需要" wortel" ?我如何实现我想要的正则表达式规范?
PS我习惯使用Ruby正则表达式,因此解释这些差异可能会有所帮助
答案 0 :(得分:5)
这是因为正则表达式中的可选捕获组:
var e = new RegExp('(, )?wortel');
您可以通过使用", "
语法的非捕获组来避免捕获(?:...)
:
var e = new RegExp('(?:, )?wortel');
此处(?:, )?
使其成为非捕获组。
现在结果只是一个元素:
Array [ ", wortel" ]