zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    19.模块化
    20.ES7新特性
    22.ES9
    21.ES8新特性
    RabbitMQ:排他性队列(Exclusive Queue)
    为什么要使用消息队列
    收集RabbitMQ的用户
    身份管理提供商:Gigya和PingIdentity
    HTTP协议原理(详细)
    转:Linux下高并发socket最大连接数所受的各种限制
  • 原文地址:https://www.cnblogs.com/mingforyou/p/2922801.html
Copyright © 2011-2022 走看看