正则表达式的其它方法:formatTime 、 queryURLParams 、 millimeter

241 阅读1分钟
~ function () {
    /*
     * formatTime:时间字符串的格式化处理
     *   @params
     *     templete:[string] 我们最后期望获取日期格式的模板
     *     模板规则:{0}->年  {1~5}->月日时分秒
     *   @return
     *     [string]格式化后的时间字符串
     */
    function formatTime(templete = "{0}年{1}月{2}日 {3}时{4}分{5}秒") {
        let timeAry = this.match(/\d+/g);
        return templete.replace(/\{(\d+)\}/g, (...[, $1]) => {
            let time = timeAry[$1] || "00";
            return time.length < 2 ? "0" + time : time;
        });
    }

    /* 
     * queryURLParams:获取URL地址问号和面的参数信息(可能也包含HASH值)
     *   @params
     *   @return
     *     [object]把所有问号参数信息以键值对的方式存储起来并且返回
     */
    function queryURLParams() {
        let obj = {};
        this.replace(/([^?=&#]+)=([^?=&#]+)/g, (...[, $1, $2]) => obj[$1] = $2);
        this.replace(/#([^?=&#]+)/g, (...[, $1]) => obj['HASH'] = $1);
        
        //注:[^?=&#]+指的是除了"?=&#"以外,其他字符1到多位
        	  [^xy] 除了x/y以外的任意字符
              
        return obj;
    }

    /* 
     * millimeter:实现大数字的千分符处理
     *   @params
     *   @return
     *     [string]千分符后的字符串
     */
    function millimeter() {
        return this.replace(/\d{1,3}(?=(\d{3})+$)/g, content => content + ',');
    }
    
    /* 
     * millimeter:正则验证输入框只允许输入正整数或者负整数
     *   @params
     *   @return
     *     [number]正整数或者负整数
     */
    function integer() {
        return /^-$|^-?[1-9][0-9]*$/.test(this)?this:'';
    }
    
    /* 
     * millimeter:正则验证输入框只允许输入正数
     *   @params
     *   @return
     *     [number]正数
     */
    function positiveNumber() {
        return /([1-9][0-9]*(\.\d{1,2})?)|(0\.\d{1,2})/.test(this)?this:'';
        // 或者
        // return /^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,2})?$/.test(this)?this:'';
    }

    /* 扩展到内置类String.prototype上 */
    ["formatTime", "queryURLParams", "millimeter","integer","positiveNumber"].forEach(item => {
        String.prototype[item] = eval(item);
    });
   }();