首页 > 解决方案 > 正则表达式获取每个人的积分作为一个JS对象

问题描述

我有这个字符串:

Phantom_FR - 5 Points\n\nmineblox17,Dominus_Loading - 0 Points\n\ndavidroks528,beeks567,JohnDoe54631 - 4 Points\n\n\n\n **PLEASE ARCHIVE THIS CARD WHEN YOU ARE FINISHED WITH IT**,

我需要它返回类似的东西:

{"5":["Phantom_FR], "0":[mineblox17, Dominus_Loading]}

...等等。我似乎无法弄清楚。

它以另一种语言编码为这种格式,因此无济于事。如何提取我需要的信息?

标签: javascriptnode.jsregex

解决方案


该模式/([^\n][\w,]+) - (\d+) Points/g似乎足以满足您的用例。这会将逗号分隔的用户名列表放在第一组中,将点放在第二组中。

请注意,假设这些点是预先分组的,并且它们之间不会发生冲突,否则会覆盖一个键。它还假设每个用户名组前面都有一个换行符或字符串的开头。

浏览器 JS:

const s = "Phantom_FR - 5 Points\n\nmineblox17,Dominus_Loading - 0 Points\n\ndavidroks528,beeks567,JohnDoe54631 - 4 Points\n\n\n\n **PLEASE ARCHIVE THIS CARD WHEN YOU ARE FINISHED WITH IT**";

const pattern = /([^\n][\w,]+) - (\d+) Points/g;
const usersByPoints = Object.fromEntries([...s.matchAll(pattern)]
  .map(([, users, points]) => [points, users.split(",")]));
console.log(usersByPoints);

节点JS:

const s = "Phantom_FR - 5 Points\n\nmineblox17,Dominus_Loading - 0 Points\n\ndavidroks528,beeks567,JohnDoe54631 - 4 Points\n\n\n\n **PLEASE ARCHIVE THIS CARD WHEN YOU ARE FINISHED WITH IT**";

const pattern = /([^\n][\w,]+) - (\d+) Points/g;
const usersByPoints = {};

for (let m; m = pattern.exec(s); usersByPoints[m[2]] = m[1].split(","));

console.log(usersByPoints);


推荐阅读