正则表达式用于检索括号之间的两个变量

Regex to retrieve two variables between brackets

本文关键字:两个 变量 检索 用于 之间 正则表达式      更新时间:2023-09-26

我试图检索两个双括号之间的两个变量。到目前为止,我有这个:

var regex = /'['['s([a-z]+):*'s*(['d])*'s']']/g;
var obj = {};
var text = '[[ dogs: 1 ]] [[ dogs: 2 ]] [[ cats: 1 ]]';
var module = text.replace(regex, function (match, key, value) {
    obj[key] = value;
    console.log(obj);
});

结果是:

Object {dogs: "2", cats: "1"}

我想要的是:

Object {dogs: "1", dogs: "2", cats: "1"}

对于我的生活,我无法弄清楚为什么狗只显示第二个id。

这是因为对象不能包含具有相同键的多个项目。第二次设置dogs时,它将覆盖第一个实例。

一些替代解决方案包括创建对象数组:

var regex = /'['['s([a-z]+):*'s*(['d])*'s']']/g;
var arr = [];
var text = '[[ dogs: 1 ]] [[ dogs: 2 ]] [[ cats: 1 ]]';
var module = text.replace(regex, function (match, key, value) {
    var obj = {};
    obj[key] = value;
    arr.push(obj);
    console.log(arr);
});

或者使用创建数组对象:

var regex = /'['['s([a-z]+):*'s*(['d])*'s']']/g;
var obj = {};
var text = '[[ dogs: 1 ]] [[ dogs: 2 ]] [[ cats: 1 ]]';
var module = text.replace(regex, function (match, key, value) {
    if (obj[key]) {
        obj[key].push(value);
    } else {
        obj[key] = [value];
    }
    console.log(obj);
});

您的错误不在正则表达式内部,在对象内部。

不能有一个对象具有两个相同的键。

我建议你将数据放入数组中,并在需要时进行迭代:

var regex = /'['['s([a-z]+):*'s*(['d])*'s']']/g;
var arr = [];
var text = '[[ dogs: 1 ]] [[ dogs: 2 ]] [[ cats: 1 ]]';
var module = text.replace(regex, function (match, key, value) {
    var obj = {}
    obj[key] = value;
    arr.push(obj);
});
console.log(arr); // [{dogs:1},{dogs:2},{cats:1}]

由于您不能拥有多个同名的属性,因此我的建议是使用数组来存储不同的值,如下所示;

http://jsbin.com/qiqacifata/1/edit?js,console

var regex = /'['['s([a-z]+):*'s*(['d])*'s']']/g;
var obj = {};
var text = '[[ dogs: 1 ]] [[ dogs: 2 ]] [[ cats: 1 ]]';
var module = text.replace(regex, function (match, key, value) {
    if(!obj[key]) {
        obj[key] = [];
    }
    obj[key].push(value);
});
console.log(obj);

结果;

{
  cats: ["1"],
  dogs: ["1", "2"]
}