2012-02-20 56 views
0

我從來不是正則表達式的專家,所以我需要一些幫助以下。正則表達式javascript - url結構

我有以下字符串:'<param1>(/<param2>(/<param3>(/<param4>)))'。 這是一種url結構。 我想提取:'param1','param2','param3','param4'並檢查它們是否可選。 參數在括號中是可選的(在這種情況下爲param2,param3和param4)。

在此先感謝。

+2

這似乎是它會作爲一個解析器做得更好,不使用正則表達式。你想循環遍歷每個角色,每次你點擊一個按鈕時,都會將一個關卡推到一個「堆棧」上(如果你點擊一個'',則會彈出')。如果堆棧不是空的,你有一個可選的參數。 – GregL 2012-02-20 08:50:48

+0

是的,你是對的。爲此編寫解析器會更好。謝謝! – 2012-02-20 09:15:17

回答

1

這可能會幫助您:

var str = '<param1>(/<param2>(/<param3>(/<param4>)))'; 
var optionnals = str.match(/\/<\w+>/g).map(function(s) { return s.replace(/\/<(\w+)>/, "$1"); }); 

但它可能是很難有深刻的/遞歸匹配。

-1

可能沒有正則表達式?

var str = 'param1/param2/param3/param4'; 
var res = str.split('/'); 
1

這工作:

//var str = '<param1>'; 
//var str = '<param1>(/<param2>)'; 
//var str = '<param1>(/<param2>(/<param3>))'; 
var str = '<param1>(/<param2>(/<param3>(/<param4>)))'; 

var result = str.match(/^<(.*?)>(?:\(\/<(.*?)>(?:\(\/<(.*?)>(?:\(\/<(.*?)>\))?\))?\))?/); 

console.log(result[1]); //param1 
console.log(result[2]); //param2 
console.log(result[3]); //param3 
console.log(result[4]); //param4