2012-02-20 10 views
0

私は決して正規表現のエキスパートでしたので、私は以下の助けが必要です。Regex javascript - url structure

私は次の文字列を持っています:'<param1>(/<param2>(/<param3>(/<param4>)))'です。 これはURL構造の一種です。 'param1'、 'param2'、 'param3'、 'param4'を抽出し、それらがオプションかどうかをチェックしたいと思います。 paramは、括弧内にあればオプションです(この場合はparam2、param3、param4)。

ありがとうございます。

+2

これがそうです。それぞれの文字をループし、 '('を押すたびに ''スタック 'にレベルをプッシュし、 ''を打つとポップします)。スタックが空でない場合は、オプションのパラメータがあります。 – GregL

+0

はい、そうです。このためにパーサーを書く方が良いです。ありがとう! –

答えて

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