访问对象属性的字符串值中的变量值?(JavaScript)



当使用AWS S3 headObject函数时,我收到一个Javascript对象,该对象具有名为Restore的属性,该属性设置如下:

{
Restore: "ongoing-request="false", expiry-date="Sun, 13 Aug 2017 00:00:00 GMT""
}

或者像这样:

{
Restore: "ongoing-request="true""
}

我想访问并使用Restore属性字符串值中的值,即正在进行的请求变量和到期日期变量,但问题是它们在字符串中。我如何最好地解析Restore属性的String值,以便获得正在进行的请求和到期日期的值,并将它们设置为Javascript变量,以便我可以执行以下操作:

if(ongoingRequest === "true") {
console.log("Bla bla bla");
}

或者:

let date = new Date(expiryDate);

您可以使用正则表达式和String.prototype.match提取值。这里有一个例子:

const exampleOne = "ongoing-request="false", expiry-date="Sun, 13 Aug 2017 00:00:00 GMT"";
const exampleTwo = "ongoing-request="true"";
console.log(parseRestore(exampleOne), parseRestore(exampleTwo));
function parseRestore(str) {
const ongoing = str.match(/ongoing-request="(true|false)"/);
const expiry = str.match(/expiry-date="(.+?)"/);
return {
'ongoing-request': ongoing[1] === "true", 
'expiry-date': (expiry || [])[1]
};
}

此解决方案比Andre Nuechter的方法更通用。我解析所有属性的字符串,而不仅仅是正在进行的请求和到期日期。
首先,我将内部的双引号替换为单引号,因为它们更容易处理。然后,我将字符串与字符串进行全局拆分。match是一个字符串数组中的字符串,它与具有值的属性相匹配。我接受在每个字符串的末尾有一个可选的带空格的逗号"这是条目分离所需要的。
现在,我将所有属性添加到结果对象中。为此,我在开头搜索一个字符串(属性名称(,后跟等号,并在引号中标记另一个字符串(属性值(。结尾处除了一个带空格的可选逗号。从字符串匹配结果中,我可以获得属性的名称和值,这样我就可以将其添加到结果中。

function parseRestore(test) {
test =  test.Restore.replace(/"/gi,"'");

let entries = test.match(/[^=]+='[^']+'(, )?/g);
let result = {};
for (let i=0; i<entries.length; i++) {
let entrySplit = entries[i].match(/^(.+)='(.+)'(, )?$/);

result[entrySplit[1]] = entrySplit[2];
}

return result;
}
let test_1 = {
Restore: "ongoing-request="false", expiry-date="Sun, 13 Aug 2017 00:00:00 GMT""
};
let test_2 = {
Restore: "ongoing-request="true""
}
console.log( parseRestore( test_1 ) );
console.log( parseRestore( test_2 ) );

最新更新