日期:2014-05-17  浏览次数:20432 次

求大师帮忙修复下这个正则表达式
以下是分析内容:


$.api.auth({    method: 'list.get',    key: '0',    module: '0001',    page: '1',    pagesize: '10',    type: 'hd'}, function (data) {alert(data);});
     
$.api.auth({    method: 'init.get',    module: '0010',    moduletype: 'hd'}, function (data) {var json = data;});
         
$("#demoID").click(function () { $.api.auth({    method: 'load.get',    module: '012',    moduletype: 'hd'}, function (data) {var json = data;}); });

$.api.auth({    method: 'list.get',    key: 'id',    module: '0026',    page: '1',    pagesize: '1',    type: 'hd'}, function (data) {alert(data);for (var i = 0; i < data.item.length) { alert(data.item[i]); };});


现在的正则表达:

(?i)\$(\((['""])([^\2]+)\2\))?.*?{([^}]+)},\s*function.*?{([^}]*?)}


前3条可以解释为


List[0][0] = "";
List[0][1] = method: 'list.get',key: '0',module: '0001',page: '1',pagesize: '10',type: 'hd'
List[0][2] = alert(data);

List[1][0] = "";
List[1][1] = method: 'init.get',    module: '0010',    moduletype: 'hd'
List[1][2] = var json = data;

List[2][0] = "demoID";
List[2][1] = method: 'load.get',    module: '012',    moduletype: 'hd'
List[2][2] = var json = data;


但是最后一条出错了


List[3][2] = alert(data);for (var i = 0; i < data.item.length) { alert(data.item[i]); 


实际解析应该为

alert(data);for (var i = 0; i < data.item.length) { alert(data.item[i]); };


这个正则把 }; 去掉了。实际他只拆分到了第一个匹配的};上,后面有再多的这样语法,我都无视了。请大师帮忙看看。

------解决方案--------------------
 foreach(Match m in Regex.Matches(sInput, @"(?i)\$(\((['""])?([^'""]+?)\2\))?[\s\S]*?\(\{([^{}]*?)\},[\s\S]*?\{([^{}]*?((?<Open>\{)
------解决方案--------------------
(?<-Open>\})
------解决方案--------------------
[^{}])*(?(Open)(?!)))\}"))
            {
                string v1 =&nbs