Nodejs可选正则expression式命名组的插件或代码片段

string

line 1 = [ABC] line 2 = [AC] line 3 = [BC] 

正则expression式

 /\[?(?<groupA>[A])?(?:[ ]*)?(?<groupB>[B])?(?:[ ]*)?(?<groupC>[C])\]/gm 

如何使用插件或代码片段实现以下行为?

第1行

 result.groupA = A result.groupB = B result.groupC = C 

2号线

 result.groupA = A result.groupB = null/undefined result.groupC = C 

第3行

 result.groupA = null/undefined result.groupB = B result.groupC = C 

我已经试过名为js-regexp npm包,但是该包依赖于

 var matched = RegExp.prototype.exec.call() 

这将返回一个匹配,未定义/不匹配组的位置不能被识别。

https://regex101.com/r/aD2sZ3/1上的实现可以完美实现。 注意:regex101生成的JavaScript代码在nodejs中不起作用,因为绑定的正则expression式缺less对命名组的支持。

更新:XRegExp包按预期为此工作。 我们也可以使用下面的答案解决scheme,然后枚举“命名”手动捕获。

为什么不只是删除组名? 然后检查索引缺less的内容。

 var re = /\[?([A])?(?:\s*)?([B])?(?:\s*)?([C])\]/gm; var str = '[C]'; var m; while ((m = re.exec(str)) !== null) { if (m.index === re.lastIndex) { re.lastIndex++; } if (m[1] == null){ console.log('Missing A'); }; if (m[2] == null){ console.log('Missing B'); }; if (m[3] == null){ console.log('Missing B'); }; }