首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

求大师帮忙修复下这个正则表达式,该怎么处理

2013-10-21 
求大师帮忙修复下这个正则表达式以下是分析内容:$.api.auth({method: list.get,key: 0,module: 0001

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


$.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 = m.Groups[3].Value;
                //#demoID
                string v2 = m.Groups[4].Value;
                // method: 'load.get',    module: '012',    moduletype: 'hd'
                string v3 = m.Groups[5].Value;
                //alert(data);for (var i = 0; i < data.item.length) { alert(data.item[i]); };
            }

热点排行