Javascript-非结构化URL的URL解码

Javascript-非结构化URL的URL解码,javascript,string,decodeuricomponent,Javascript,String,Decodeuricomponent,我有一个URL,在使用decodeURIComponent解码后看起来像这样 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 =

我有一个URL,在使用decodeURIComponent解码后看起来像这样

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提取这些参数时,效率不是很高


有更好的方法提取这些吗?我可以想到regex,但我对它不太熟悉,因此无法使用它。

您可以通过匹配嵌入的JSON,然后将其转换为一个对象来实现这一点,也许可以使用以下类似的方法:

JSON.parse(foo.match(/({.+})[^}]+/)[1])
正则表达式
/({.+})[^}]+/
通过匹配一个
{
后面跟任何东西,后面跟
}
来创建一个组,然后仅当组后面跟的不是
}
的东西时才匹配

JSON正在解析第一个匹配的组

有一个问题,我不确定是因为您的问题有打字错误还是与
decodeURIComponent
有关:

在您的预期输出中,您有:

appMarkupRevenueApp = unique identifier
但是,您的数据有:

"APPLICATION@markup://revenue:app":"unique_identifier"
这是一个很大的不匹配,不清楚哪一个是正确的

小型演示:

var字符串class='1〕https://secretStar.22.test.com/l/{“模式”:“测试”,“应用”:“收入:应用”,“参数2”:1,“加载”:{”APPLICATION@markup://收入:应用程序“:”唯一标识符“}”,路径前缀“:”,“xx”:1}/script22.js';
var data=JSON.parse(string.match(/({.+})[^}]+/)[1]);

对于(key of Object.keys(data)){console.log(`${key}:${data[key]}')}
您可以通过匹配嵌入的JSON,然后将其转换为一个对象来实现这一点,也许可以使用以下类似的方法:

JSON.parse(foo.match(/({.+})[^}]+/)[1])
正则表达式
/({.+})[^}]+/
通过匹配一个
{
后面跟任何东西,后面跟
}
来创建一个组,然后仅当组后面跟的不是
}
的东西时才匹配

JSON正在解析第一个匹配的组

有一个问题,我不确定是因为您的问题有打字错误还是与
decodeURIComponent
有关:

在您的预期输出中,您有:

appMarkupRevenueApp = unique identifier
但是,您的数据有:

"APPLICATION@markup://revenue:app":"unique_identifier"
这是一个很大的不匹配,不清楚哪一个是正确的

小型演示:

var字符串class='1〕https://secretStar.22.test.com/l/{“模式”:“测试”,“应用”:“收入:应用”,“参数2”:1,“加载”:{”APPLICATION@markup://收入:应用程序“:”唯一标识符“}”,路径前缀“:”,“xx”:1}/script22.js';
var data=JSON.parse(string.match(/({.+})[^}]+/)[1]);

对于(key of Object.keys(data)){console.log(`${key}:${data[key]}')}
@A-D不确定appMarkupRevenue,wierd正在进行某些操作是的,loaded返回一个对象,我可以从中提取值。@A-D不确定appMarkupRevenue,wierd正在进行某些操作是的,loaded返回一个对象,我可以从中提取值。