JS校验字串是否符合正则表达式详解编程语言

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

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论