Javascript - 非结构化 URL 的 URL 解码

标签 javascript string decodeuricomponent

使用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/

相关文章:

ios - 我的 AVPlayer 的本地路径视频出现字符串错误

javascript - JS DecodeURIComponent 在 Firefox 中返回空字符串(最新)

javascript - PHP (PDO) urlencoded 如何在 javascript 中解码?解码URI?或解码 URI 组件?

javascript - Angular2 v3 组件路由器 : TypeError: Cannot read property 'split' of undefined

javascript - 加载文件夹内容

string - 连接字符串

string - 在 Haskell 中解析输入文件文件

Javascript decodeURI(Component) 格式错误的 uri 异常

javascript - 阻止浏览器中的 ctrl+z

javascript - HTML Div 转换为带背景图像的图像 Html2canvas