当使用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 ) );