2012-02-20 57 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