如何判断正则表达式(RegEx)匹配到了哪个捕获组?
如何判断正则匹配到的是哪个捕获组
这个需求我之前也碰到过,不用修改原正则就能搞定!JavaScript里RegExp.exec()返回的匹配数组已经藏着我们需要的信息,直接利用它就行。
解决方案代码
var str = "aabbcc"; var re = /(aa)|(cc)/gi; let match; while ((match = re.exec(str)) != null) { console.log(`匹配起始位置: ${match.index}`); // 核心逻辑:找到第一个被匹配的捕获组序号 const matchedGroupIndex = match.slice(1).findIndex(group => group !== undefined) + 1; console.log(`匹配到的捕获组序号: ${matchedGroupIndex}`); // 这里可以根据组序号执行对应操作 if (matchedGroupIndex === 1) { console.log("处理匹配到aa的逻辑"); } else if (matchedGroupIndex === 2) { console.log("处理匹配到cc的逻辑"); } }
原理说明
当exec()找到匹配项时,返回的match数组结构很关键:
- 索引
0:整个匹配的字符串(比如第一次循环是"aa",第二次是"cc") - 索引
1、2...:对应正则里的第1、2...个捕获组内容,未被匹配到的捕获组会是undefined
所以我们通过match.slice(1)去掉整个匹配的内容,只保留捕获组部分,再用findIndex找到第一个不为undefined的元素,最后加1(因为findIndex从0开始计数,而捕获组序号从1开始),就得到了我们要的组号。
这个方法完全兼容你原有的循环结构,不需要修改正则表达式,完美适配你的需求~
内容的提问来源于stack exchange,提问作者Takit Isy
相关产品推荐
相关产品推荐

