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

JS正则匹配英雄信息时跳过第二条数据,求排查错误原因

正则匹配跳过英雄的问题分析与修复

原始场景

待匹配的英雄文本

Team A Draft: Hero 1: Name: Pugna Lane: Mid
Hero 2: Name: Faceless Void Lane: Safelane
Hero 3: Name: Earthshaker Lane: Offlane
Hero 4: Name: Lion Lane: Support
Hero 5: Name: Lina Lane: Support

使用的正则表达式

/Hero\s+(\d+):\s+Name:\s+(\w+)\s+Lane:\s+(\w+)/g

异常的匹配结果

[
    {
        "position": 1,
        "hero": "Pugna",
        "lane": "Mid"
    },
    {
        "position": 2,
        "hero": "Earthshaker",
        "lane": "Offlane"
    },
    {
        "position": 3,
        "hero": "Rubick",
        "lane": "Support"
    },
    {
        "position": 4,
        "hero": "Juggernaut",
        "lane": "Safe"
    }
]

问题根源

  1. 正则无法匹配带空格的英雄名:第二个英雄Faceless Void包含空格,但你用的\w+只能匹配字母、数字和下划线,空格不在匹配范围内,导致这条记录直接被跳过。
  2. 匹配结果出现无关数据:Rubick、Juggernaut这些英雄根本不在原始文本里,说明你的getHeroMap函数要么复用了旧的匹配缓存,要么存在硬编码/赋值逻辑错误。

修复步骤

1. 修正正则表达式

把匹配英雄名的\w+替换成能匹配空格且不会过度匹配的模式,推荐用非贪婪匹配到Lane:之前的内容:

/Hero\s+(\d+):\s+Name:\s+([^L]+?)\s+Lane:\s+(\w+)/g
  • [^L]+?:非贪婪匹配所有不是L的字符,刚好停在Lane:的开头,完美适配带空格的英雄名。
  • 非贪婪模式(?)能避免匹配到下一行的内容。

2. 排查getHeroMap函数

  • 全局正则会保留lastIndex记录上次匹配的位置,每次匹配前要手动重置regex.lastIndex = 0,避免后续匹配位置偏移。
  • 检查函数里是否有硬编码的错误英雄数据,或者匹配结果的索引、赋值逻辑是否出错,确保只使用当前匹配到的结果。

内容的提问来源于stack exchange,提问作者Marc Rasmussen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:52:23