有一个字符串,可能为下列几种情况(每行一种情况)中的任何一个:
header
header {min:'12'}
header {max:'24'}
header {min:'12',max:{24}}
header {max:'24',min:{12}}
others header {min:'12'}
others header {max:'24'}
others header {min:'12',max:{24}}
others header {max:'24',min:{12}}
header others {min:'12'}
header others {max:'24'}
header others {min:'12',max:{24}}
header others {max:'24',min:{12}}
请问如何对字符串格式进行匹配?
匹配要求:
1、必须包含header
2、若包含{}则匹配里面是否有min,max,则需要对min,max后面单引号中的值分组,并将group命名为min或max,如group[min]=12,group[max]=24。暂时给100分,不够再给,多谢了!正则表达式

解决方案 »

  1.   

    <script type="text/javascript">
    var reg=/^.*header.*?\{((min:[{'](\d+)['}])?,?(max:[{'](\d+)['}])?|(max:[{'](\d+)['}])?,?(min:[{'](\d+)['}])?)\}$/;
    var t=['header',"header {max:'24'}","header {min:'12',max:{24}}","header {max:'24',min:{12}}","others header {min:'12'}","others header {max:'24'}","others header {min:'12',max:{24}}","others header {max:'24',min:{12}}","header others {min:'12'}","header others {max:'24'}","header others {min:'12',max:{24}}","header others {max:'24',min:{12}}"];
    for(var i in t){
    var group=[];
    if(reg.test(t[i])){
    if(RegExp.$2||RegExp.$8){
    group['min']=RegExp.$3||RegExp.$9;
    }
    if(RegExp.$4||RegExp.$6){
    group['max']=RegExp.$5||RegExp.$7;
    }
    }
    alert(t[i]+"-"+reg.test(t[i])+":min="+group['min']+";max="+group['max']);
    }
    </script>
    大体这样试下
      

  2.   


     function parse(str){
      var reg=/(min|max):['{](\d+)['}]/g,re={};
      str.replace(/^.*header.+?\{(.+)\}/gm,function(a,b){
           b.replace(reg,function(s,k,v){
            re[k]=v
           })
        });
       return re;
      }
    var result=parse("others header {min:'12',max:{24}}");
    alert( result.max )