我做了这个正则表达式/(\["?.+"?(?:,"?.+"?)*\]|(?:"([^"]*)"))(?:\.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可以更好地查看捕获组
答案 0 :(得分:2)
将其添加为答案。
问题在于第一个捕获组。内部的非捕获对象只是告诉引擎不要生成捕获,而外部成员已经捕获了。
用(\["?.+"?(?:,"?.+"?)*\]|(?:"([^"]*)"))
替换(?:\"([^"]*)\"|(\[[^\]]*\]))
应该可以完成工作。
Demo。