2016-08-23 39 views
0

我有一個設計不佳的URL查詢字符串,我不能輕易更改,例如拆分術語上的字符串,然後拆分另一術語

https://mysite/.shtml?source=999&promotype=promo&cmpid=abc--dfg--hif-_-1234&cm=qrs-stv-_wyx&aff=45628_THIS+IS+Test_Example

我需要例如從中提取元件45628

目前我使用

document.URL.split(/aff=|_/)[5]; 

但我不喜歡這樣的解決方案,因爲如果URL結構變化,這是非常有可能的其他部分,然後我的解決方案將打破

相反我想說的是對 「AFF =」

分裂,然後分裂的 「_」

有一個簡單的方法來做到這一點,找JS回答

回答

2

敢肯定你能做到這一點是這樣的:

document.URL.split("aff=")[1].split("_")[0]; 
0

我會通過分割字符串成令牌,如果能啓動。將其分解爲[['foo', 'bar'], ['fin', 'bin]],而不是與foo=bar&fin=bin一起使用。您可以在&,然後做到這一點的分裂分裂每個那些對=性格:

const data = 'source=999&promotype=promo&cmpid=abc--dfg--hif-_-1234&cm=qrs-stv-_wyx&aff=45628_THIS+IS+Test_Example'; 
 

 
console.log(data.split('&').map(it => it.split('=')));

接下來,把你想要的標記並提取領先的數字:

const data = 'source=999&promotype=promo&cmpid=abc--dfg--hif-_-1234&cm=qrs-stv-_wyx&aff=45628_THIS+IS+Test_Example'; 
 

 
const tokens = data.split('&').map(it => it.split('=')); 
 
const [key,val] = tokens.find(([key]) => key === 'aff'); 
 
console.log(key, val.match(/[0-9]+/));