使用decodeURIComponent 解码后,我的 URL 看起来像这样
https://secretStar.22.test.com/l/{"mode":"test","app":"revenue:app","param2":1,"loaded":{"APPLICATION@markup://revenue:app":"unique_identifier"},"pathPrefix":"","xx":1}/script22.js
现在,我想从此 URL 中提取一些详细信息,例如:
mode = test
app = revenue:app
param2 = 1
appMarkupRevenueApp = unique identifier
scriptName = script.js
如果这些值是 qs 参数,我可以使用 qs 参数提取它。我能够通过编写一个拆分和连接然后再次拆分的函数来提取信息,但是当从 csv 文件中超过 4k 的 URL 中提取这些参数时,这不是很有效。
有没有更好的方法来提取这些?我可以想到正则表达式,但我对此不太熟悉,无法让它发挥作用。
最佳答案
您可以通过匹配嵌入的 JSON,然后将其转换为对象来实现此目的,也许可以使用如下所示的内容:
JSON.parse(foo.match(/({.+})[^}]+/)[1])
正则表达式 /({.+})[^}]+/
通过匹配 {
后跟任何内容,后跟 来创建一个组}
然后仅当该组后面跟着不是 }
JSON 正在解析第一个匹配的组。
有一个问题,我不确定是由于您的问题有拼写错误还是与 decodeURIComponent
有关:
在您的预期输出中,您有:
appMarkupRevenueApp = unique identifier
但是您的数据有:
"APPLICATION@markup://revenue:app":"unique_identifier"
这是一个相当不匹配的情况,并且不明显哪个是正确的
小演示:
var string = 'https://secretStar.22.test.com/l/{"mode":"test","app":"revenue:app","param2":1,"loaded":{"APPLICATION@markup://revenue:app":"unique_identifier"},"pathPrefix":"","xx":1}/script22.js';
var data = JSON.parse(string.match(/({.+})[^}]+/)[1]);
for(key of Object.keys(data)) { console.log(`${key}: ${data[key]}`) }
关于Javascript - 非结构化 URL 的 URL 解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51276116/