2017-12-18 283 views
1

客戶/訂單數抽取我希望正則表達式大師可以幫助解決我的問題,正則表達式從URL

我想搜索以下URL's提取數據的某些部分:

  • /#!/customers/2848060/orders/9234573/history

    1. 我想一個正則表達式函數來提取以下'customers'字符串(2848060)數量。

    2. 我想要另一個正則表達式提取單詞'orders'(9234573)後面的數字。

任何幫助將大規模讚賞。

+2

我建議你玩https://regex101.com/來建立你的正則表達式。 –

回答

1

我想要一個正則表達式函數來提取'客戶' 字符串(2848060)後面的數字。

/(?<=customers\/)(.*)(?=\/orders)/g 

我想另一個正則表達式來提取字後的數字 '訂單' (9234573)。

/(?<=orders\/)(.*)(?=\/history)/g 

以下爲測試

var str = '/#!/customers/2848060/orders/9234573/history' 
 

 
var customer = str.match(/(?<=customers\/)(.*)(?=\/orders)/g)[0] 
 
var order = str.match(/(?<=orders\/)(.*)(?=\/history)/g)[0] 
 

 
console.log(customer); 
 
console.log(order);

替代解決方案片斷

我想一個正則表達式函數來提取後面的數字'customers' string(2848060)。

/customers\/(.*)\/orders/ 

我想另一個正則表達式來提取字後的數字 '訂單' (9234573)。

/orders\/(.*)\/history/ 

以下爲測試

var str = '/#!/customers/2848060/orders/9234573/history' 
 

 
var customer = str.match(/customers\/(.*)\/orders/)[1] 
 
var order = str.match(/orders\/(.*)\/history/)[1] 
 

 
console.log(customer); 
 
console.log(order);

+0

JS在正則表達式中不支持向後看,僅向前看 – Thomas

+0

可能是我對RegEx的瞭解有限。你能否指出我的意見解釋方向?謝謝。 –

+0

JS中不允許/支持'(?<= ...)'部分。這就是爲什麼你的片段拋出一個錯誤 – Thomas

1

片斷我想一個正則表達式函數來提取以下 '客戶' 字符串(2848060)

使用捕獲組

對於客戶/customers\/(\d+)/

var matches = "/#!/customers/2848060/orders/9234573/history".match(/customers\/(\d+)/); 
if (matches) 
{ 
    console.log("customers " + matches[1]); 
} 

我想另一個正則表達式來提取字後的數字 '訂單' (9234573)。

同樣,對於訂單/orders\/(\d+)/

此外,你可能不需要正則表達式如果URL模式很可能是同一

var items = str.split("/"); 
var customers = items[4]; 
var orders = items[6]; 
+0

謝謝!我最初使用拆分,但URL可能或不可能有網址的訂單部分。這意味着它可能只是/ customers/17264658。 –

0
var r = /\d+/g; 
var s = "/#!/customers/2848060/orders/9234573/history"; 
var m; 
while ((m = r.exec(s)) != null) { 
    alert(m[0]); 
}