使用解码URIComponent解码后,我有一个看起来像这样的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]}`) }

10-07 19:49
查看更多