小编典典

RegEx 使用 RegExp.exec 从字符串中提取所有匹配项

all

我正在尝试解析以下类型的字符串:

[key:"val" key2:"val2"]

里面有任意 key:”val” 对。我想获取键名和值。对于那些好奇的人,我正在尝试解析任务战士的数据库格式。

这是我的测试字符串:

[description:"aoeu" uuid:"123sth"]

这是为了强调除了空格之外的任何内容都可以在键或值中,冒号周围没有空格,并且值总是用双引号引起来。

在节点中,这是我的输出:

[deuteronomy][gatlin][~]$ node
> var re = /^\[(?:(.+?):"(.+?)"\s*)+\]$/g
> re.exec('[description:"aoeu" uuid:"123sth"]');
[ '[description:"aoeu" uuid:"123sth"]',
  'uuid',
  '123sth',
  index: 0,
  input: '[description:"aoeu" uuid:"123sth"]' ]

description:"aoeu"也符合这种模式。我怎样才能找回所有的比赛?


阅读 83

收藏
2022-06-11

共1个答案

小编典典

继续循环调用re.exec(s)以获取所有匹配项:

var re = /\s*([^[:]+):\"([^"]+)"/g;
var s = '[description:"aoeu" uuid:"123sth"]';
var m;

do {
    m = re.exec(s);
    if (m) {
        console.log(m[1], m[2]);
    }
} while (m);

试试这个 JSFiddle:https ://jsfiddle.net/7yS2V/

2022-06-11