有一个字符串,可能为下列几种情况(每行一种情况)中的任何一个:
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分,不够再给,多谢了!正则表达式
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分,不够再给,多谢了!正则表达式
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>
大体这样试下
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 )