正则表达式,用于使用正则表达式从字符串中提取所有匹配项

2022-08-30 00:54:43

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

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

其中有任意键:“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"


答案 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/


答案 2

str.match(pattern),如果具有全局标志,则将所有匹配项作为数组返回。patterng

例如:

const str = 'All of us except @Emran, @Raju and @Noman were there';
console.log(
  str.match(/@\w*/g)
);
// Will log ["@Emran", "@Raju", "@Noman"]