使用OR(|)时的正则表达式非捕获组

时间:2019-02-22 14:35:58

标签: javascript regex

我所拥有的:

我做了这个正则表达式/(\["?.+"?(?:,"?.+"?)*\]|(?:"([^"]*)"))(?:\.includes\("?)([^"]*)(?:"?\))/g

我想匹配[123].includes("Oi") == "asdasd" && "asdw".includes("w")

但是在捕获组中,我想获取数组[123]或字符串,但不带引号asdasd

我一直在研究如何使用非捕获组,并看到了(?:<CONTEXT>(<WHAT_YOU_NEED_TO_GET>)<CONTEXT>),因此我将正则表达式设置为这样,但是当我使用OR(|)时,这是行不通的。

在第二场比赛中,我得到的捕捉组是:

0: ""asdw".includes("w")"
1: ""asdw""
2: "asdw"
3: "w"

但是我想要得到的是:

0: ""asdw".includes("w")"
1: "asdw"
2: "w"

选中Here可以更好地查看捕获组

1 个答案:

答案 0 :(得分:2)

将其添加为答案。

问题在于第一个捕获组。内部的非捕获对象只是告诉引擎不要生成捕获,而外部成员已经捕获了。

(\["?.+"?(?:,"?.+"?)*\]|(?:"([^"]*)"))替换(?:\"([^"]*)\"|(\[[^\]]*\]))应该可以完成工作。

Demo