Javascript - URL 非结构化解码 URL
Javascript - URL Decoding for an unstructured URL
我有一个 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 params,我可以使用 qs params 提取它。我能够通过编写一个拆分和连接然后再次拆分的函数来提取信息,但是当从 csv 文件中超过 4k 的 url 中提取这些参数时,这不是很有效。
有没有更好的方法来提取这些?我可以想到正则表达式,但我不太熟悉它,无法让它工作。
您可以通过匹配嵌入的 JSON 然后将其转换为一个对象来做到这一点,也许是这样的:
JSON.parse(foo.match(/({.+})[^}]+/)[1])
正则表达式 /({.+})[^}]+/
通过匹配 {
后跟任何内容,然后是 }
来创建一个组,然后仅当该组后跟不是'的内容时才匹配t }
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]}`) }
我有一个 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 params,我可以使用 qs params 提取它。我能够通过编写一个拆分和连接然后再次拆分的函数来提取信息,但是当从 csv 文件中超过 4k 的 url 中提取这些参数时,这不是很有效。
有没有更好的方法来提取这些?我可以想到正则表达式,但我不太熟悉它,无法让它工作。
您可以通过匹配嵌入的 JSON 然后将其转换为一个对象来做到这一点,也许是这样的:
JSON.parse(foo.match(/({.+})[^}]+/)[1])
正则表达式 /({.+})[^}]+/
通过匹配 {
后跟任何内容,然后是 }
来创建一个组,然后仅当该组后跟不是'的内容时才匹配t }
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]}`) }