/**
* 校验字串是否符合正则表达式
*/
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;
}