regex 正则表达式跳过第二行

osh3o9ms  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(96)

我有下面的正则表达式:

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

我在下面的文本上测试它:
A组草案:英雄1:姓名:普尼亚巷:中等
英雄2:姓名:无面虚空巷:沙弗兰
英雄3:姓名:地动山摇巷:奥弗莱恩
英雄4:姓名:狮子巷:支持
英雄5:姓名:莉娜·莱恩:支持
在javascript中使用以下函数:

function getHeroMap(text) {
    const heroRegex = /Hero\s+(\d+):\s+Name:\s+(\w+)\s+Lane:\s+(\w+)/g;
    let match;
    const heroes = [];

    while ((match = heroRegex.exec(text)) !== null) {
        const [, position, hero, lane] = match;
        heroes.push({
            position: parseInt(position),
            hero: hero,
            lane: lane.trim()
        });
    }

    return heroes;
}

然而,它似乎跳过了第二个英雄,因为结果是:

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

我做错了什么?

u3r8eeie

u3r8eeie1#

这是应该起作用的最简单的修改-只在组中包括空格字符:

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

但这是假设英雄的名字不包含任何特殊字符,如'-,这个正则表达式将涵盖所有情况,除了名字中有:-它匹配除该字符以外的任何字符:

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

这应该涵盖包括:在内的任何内容--它以非贪婪的方式匹配任何内容:

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

相关问题