You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中使用matchAll迭代器时如何获取命名捕获组的内容?

JavaScript中使用matchAll迭代器时如何获取命名捕获组的内容?

嘿,我瞅了你的代码和问题描述,一下子就找到问题根源啦!你之所以会遇到TypeError: Cannot read property 'ID' of undefined这个报错,是因为你在Array.from里做了个错误的映射——你只提取了匹配结果的整个字符串(也就是entry[0]),而没有保留完整的匹配对象,这个完整对象才包含我们需要的groups属性。

咱们来看你的代码问题点:

let foundTagEntrysList = Array.from(this.enemy().meta.HellsCommonDropList.matchAll(regex1new), entry => entry[0]);

这里的entry => entry[0]把每个匹配结果都转换成了字符串,而原本matchAll迭代器返回的每个entry是一个包含完整匹配信息的数组,它不仅有entry[0](整个匹配文本),还有对应的捕获组,以及关键的entry.groups属性(存储命名捕获组的对象)。

修正方案

把Array.from里的映射函数改成直接返回entry,不要只取entry[0]:

// 去掉entry => entry[0],或者显式写成entry => entry
let foundTagEntrysList = Array.from(this.enemy().meta.HellsCommonDropList.matchAll(regex1new));

这样foundTagEntrysList里的每个元素都是完整的匹配对象,你在newTagsAnalyser函数里就能正常访问matchedElement.groups.ID、matchedElement.groups.ItemCategory这些命名捕获组的内容了。

验证一下修正后的逻辑

假设你的测试字符串是"Item: 12 w:3\nWeapon: 8",修正后:

  • 第一个匹配对象的groups会是:{ItemCategory: "Item", ID: "12", Weight: "w:3", WeightFactor: "3"}
  • 第二个匹配对象的groups会是:{ItemCategory: "Weapon", ID: "8", Weight: undefined, WeightFactor: undefined}

这样你的switch逻辑和权重判断就能正常工作,不会再出现找不到groups的报错啦。

备注:内容来源于stack exchange,提问作者Helli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 13:17:42