考虑这个对象:
pa = {
"133": {
"B": null,
"C": {
"A": null,
"o": "http://example.com/upn?lmt=1423895085713162"
}
},
"134": {
"B": null,
"C": {
"A": null,
"o": "http://example.com/upn?lmt=1423895111043714"
}
},
"135": {
"B": null,
"C": {
"A": null,
"o": "http://example.com/upn?lmt=1423895094505523"
}
},
"136": {
"B": null,
"C": {
"A": null,
"o": "http://example.com/upn?lmt=1423895096452313"
}
}
};
我想创建一个URL数组。通常我可以做类似的事情 这样:
qu = keys(pa).map(ro => pa[ro].C.o);
但是,密钥A
,B
,C
和o
可能会发生变化。我可以创建这个数组吗?
其他方式?我想为http:
做一个递归的RegEx,但我不确定
如何实现。
答案 0 :(得分:4)
您可以使用JSON.stringify()
,String.prototype.match()
与RegExp
/http:\/\/\w+\.\w+\/\w+\?\w+=\d+/g
匹配"http:"
,后跟两个正斜杠,按字,点,字,正斜杠,单词,问号字符,单词,等号,后跟数字。
或者,正如@Sierra http:[^"]+
所建议的那样。
var pa = { "133": { "B": null, "C": { "A": null, "o": "http://example.com/upn?lmt=1423895085713162" } }, "134": { "B": null, "C": { "A": null, "o": "http://example.com/upn?lmt=1423895111043714" } }, "135": { "B": null, "C": { "A": null, "o": "http://example.com/upn?lmt=1423895094505523" } }, "136": { "B": null, "C": { "A": null, "o": "http://example.com/upn?lmt=1423895096452313" } } };
var arr = JSON.stringify(pa).match(/http:\/\/\w+\.\w+\/\w+\?\w+=\d+/g);
console.log(arr);

答案 1 :(得分:3)
只是递归搜索它。这是一个例子:
var pa = { "133": { "B": null, "C": { "A": null, "o": "http://example.com/upn?lmt=1423895085713162" } }, "134": { "B": null, "C": { "A": null, "o": "http://example.com/upn?lmt=1423895111043714" } }, "135": { "B": null, "C": { "A": null, "o": "http://example.com/upn?lmt=1423895094505523" } }, "136": { "B": null, "C": { "A": null, "o": "http://example.com/upn?lmt=1423895096452313" } } };
function searchUrl(obj, result) {
if (typeof result == 'undefined') {
result = []
}
for (key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'string' || obj[key] instanceof String) {
if (obj[key].startsWith('http://')) {
result.push(obj[key]); // handle the url here
}
} else if (obj[key] !== null && typeof obj[key] === 'object') {
searchUrl(obj[key], result);
}
}
}
return result;
}
console.log(searchUrl(pa));
答案 2 :(得分:0)
var pa = { "133": { "B": null, "C": { "A": null, "o": "http://example.com/upn?lmt=1423895085713162" } }, "134": { "B": null, "C": { "A": null, "o": "http://example.com/upn?lmt=1423895111043714" } }, "135": { "B": null, "C": { "A": null, "o": "http://example.com/upn?lmt=1423895094505523" } }, "136": { "B": null, "C": { "A": null, "o": "http://example.com/upn?lmt=1423895096452313" } } };
var urls = [];
function findUrls(obj) {
for (key in obj) {
if (typeof obj[key] === "string") {
if (obj[key].startsWith("http") || obj[key].startsWith("ftp")) {
urls.push(obj[key]);
}
} else if (obj[key] !== null && typeof obj[key] === "object") {
findUrls(obj[key]);
}
}
}
findUrls(pa);
console.log(urls); // array of urls