/** * 校验字串是否符合正则表达式 */ function matchStrings(pattern,path){ //定义匹配的通配符,?表示任意一个字符,*表示任意数量字符,**表示任意数量的目录 var singleChar = '?'; var anyChar = '*'; var anyPathChar = '**'; //分隔出每个字符,并编译出正则表达式 if(pattern){ if(pattern==anyPathChar || pattern==anyChar) return true; //如果匹配了**,则替换**为(.*) pattern = pattern.replace('**','(.*)'); //按(.*)分隔为数组,如果数组中每个元素匹配了*,则替换*为(.*) var arr = pattern.split('(.*)'); var temp = ''; for(var i=0;i<arr.length;i++){ if(arr[i] && arr[i].trim().length>0){ //如果数组长度>1表示包含了**字符串,所以要加上(.*) if(arr.length>1){ temp = temp + (arr[i].replace('*','(.*)') + '(.*)'); }else{ temp = arr[i].replace('*','(.*)'); } } } //如果匹配了?则替换?,得到最后的正则表达式字符串 temp = temp.replace('?','(.+)'); var reg = new RegExp(temp); //如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。 //此数组的第0个元素是与正则表达式相匹配的文本,第1个元素是与RegExpObject的第1个子表达式相匹配的文本(如果有的话), //第2个元素是与 RegExpObject 的第2个子表达式相匹配的文本(如果有的话),以此类推 var results = reg.exec(path); if(results){//如果能够匹配到字符串 //如果文本与paths相等表示成功,避免出现pattern为a,而path为a.do时匹配成功 if(results[0]==path) return true; } } return false; }
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/13298.html