名为group

时间:2016-03-09 03:48:49

标签: javascript regex node.js

字符串

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包为此目的按预期工作。我们也可以使用下面答案中的解决方案,然后手动枚举“命名”捕获。

1 个答案:

答案 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');
    };
}