我有下面的正则表达式:
/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"
}
]
我做错了什么?
1条答案
按热度按时间u3r8eeie1#
这是应该起作用的最简单的修改-只在组中包括空格字符:
但这是假设英雄的名字不包含任何特殊字符,如
'
或-
,这个正则表达式将涵盖所有情况,除了名字中有:
-它匹配除该字符以外的任何字符:这应该涵盖包括
:
在内的任何内容--它以非贪婪的方式匹配任何内容: