字符串
line 1 = [A B C]
line 2 = [A C]
line 3 = [B C]
正则表达式
/\[?(?<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
我尝试过named-js-regexp npm包,但是包依赖于
var matched = RegExp.prototype.exec.call()
返回匹配,其中无法识别未定义/不匹配组的位置。
https://regex101.com/r/aD2sZ3/1上的实施工作完美无缺。 注意:由于捆绑的正则表达式缺少对命名组的支持,regex101生成的javascript代码在nodejs中不起作用。
更新:XRegExp包为此目的按预期工作。我们也可以使用下面答案中的解决方案,然后手动枚举“命名”捕获。
答案 0 :(得分:1)
为什么不删除群组名称?然后检查索引缺少的内容。
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');
};
}