• JavaScript RegExp 对象 正则(ip转换数字、域名提取)、毫秒转为日期天时分秒


    一、JS中的正则对象

    原文:https://www.runoob.com/jsref/jsref-obj-regexp.html

    var patt = new RegExp(pattern,modifiers);
    或
    var patt = /pattern/modifiers; 

    modifiers 修饰符,即匹配模式如下:

    修饰符描述
    i 执行对大小写不敏感的匹配。
    g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
    m 执行多行匹配。
    // 如果需要常规的字符转义规则(在前面加反斜杠 \)。
    // 注意,如果是new的形式,需要两个斜杆 \\ 而简便的/ /模式只需要一个斜杆 \,以下是等价的:
    var re1 = new RegExp("www\\.baidu\\.com");
    var re2 = /www\.baidu\.com/;

    二、RegExp 对象方法

    方法描述
    exec 检索字符串中指定的值。返回找到的值,并确定其位置。
    test 检索字符串中指定的值。返回 true 或 false。
    toString 返回正则表达式的字符串。

    1、exec

    原文:https://www.runoob.com/jsref/jsref-exec-regexp.html

    exec() 方法用于检索字符串中的正则表达式的匹配。

    如果字符串中有匹配的值返回该匹配值(数组),否则返回 null。

    语法

    RegExpObject.exec(string)
    var str = "Hello world!";
    // 查找"Hello",exec返回的是数组
    var patt = /Hello/g;
    var result = patt.exec(str);
    console.log("结果: " +  result[0]);
    
    // 查找 "dog"
    var str2 = "Hello Dog"
    var patt2 = new RegExp("dog", "i");
    var result2 = patt2.exec(str2);
    console.log("结果: " +  result2[0]);
    
    /* 
    结果: Hello
    结果: Dog
    */

    2、test

    原文:https://www.runoob.com/jsref/jsref-test-regexp.html

    test() 方法用于检测一个字符串是否匹配某个模式.

    如果字符串中有匹配的值返回 true ,否则返回 false。

    语法

    RegExpObject.test(string)
    var str = "Hello world!";
    // 查找"Hello",test返回值是布尔值
    var patt = /Hello/g;
    var result = patt.test(str);
    console.log("结果: " +  result);
    
    //查找 "dog"
    var str2 = "Hello Dog"
    var patt2 = new RegExp("dog", "i");
    var result2 = patt2.test(str2);
    console.log("结果: " +  result2);
    
    /*
    结果: true
    结果: true
    */

    3、toString

    原文:https://www.runoob.com/jsref/jsref-regexp-tostring.html

    用于返回正则表达式的字符串值

    var patt = new RegExp("zzz", "g");
    var res = patt.toString();
    
    // "/zzz/g"

    三、RegExp 对象属性

    属性描述
    constructor 返回一个函数,该函数是一个创建 RegExp 对象的原型。
    global 判断是否设置了 "g" 修饰符
    ignoreCase 判断是否设置了 "i" 修饰符
    lastIndex 用于规定下次匹配的起始位置
    multiline 判断是否设置了 "m" 修饰符
    source 返回正则表达式的匹配模式
    var patt = new RegExp("zzz", "g");
    patt.lastIndex  // 0
    patt.global  // true
    patt.ignoreCase  // false
    patt.multiline  // false
    patt.source  // "zzz"

    四、支持正则表达式的 String 对象的方法

    方法描述
    search 检索与正则表达式相匹配的值。
    replace 替换与正则表达式匹配的子串。
    split 把字符串分割为字符串数组。
    match 找到一个或多个正则表达式的匹配。

    1、search

    原文:https://www.runoob.com/jsref/jsref-search.html

    search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

    如果没有找到任何匹配的子串,则返回 -1。

    语法

    string.search(searchvalue)

    参数值

    参数描述
    searchvalue 必须。查找的字符串或者正则表达式。

    返回值

    类型描述
    Number 与指定查找的字符串或者正则表达式相匹配的 String 对象起始位置。
    var str = "my name is Zzbj";
    str.search("z"); // 找到小写的z,返回12
    
    str.search(/z/i);  // 使用正则,忽略大小写,找到大写的Z,返回11
    
    var r = new RegExp("z+");
    str.search(r);  // 找到小写的z,返回12

    2、replace

    原文:https://www.runoob.com/jsref/jsref-replace.html

    定义和用法

    replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串.

    该方法不会改变原始字符串。

    语法

    string.replace(searchvalue,newvalue)

    参数值

    参数描述
    searchvalue 必须。字符串或者正则regexp对象。
    newvalue 必需。一个字符串值。规定了替换文本或生成替换文本的函数。

    返回值

    类型描述
    String 一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。
    var str = "you are a big big pig";
    var str_res = str.replace("big", "small");  // "you are a small big pig"
    
    var reg_res = str.replace(/big/g, "small");  / "you are a small small pig"

    3、split

    原文:https://www.runoob.com/jsref/jsref-split.html

    定义和用法

    split() 方法用于把一个字符串分割成字符串数组。

    提示: 如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。

    注意: split() 方法不改变原始字符串。

    语法

    string.split(separator,limit)

    参数值

    参数描述
    separator 可选。字符串或正则表达式,从该参数指定的地方分割 string Object。
    limit 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。

    返回值

    类型描述
    Array 一个字符串数组。该数组是通过在 separator 指定的边界处将字符串 string Object 分割成子串创建的。返回的数组中的字串不包括 separator 自身。
    var str = "hello my big pig";
    var res_all = str.split(" ");  // ["hello", "my", "big", "pig"]
    var res_2 = str.split(" ", 2);  // ["hello", "my"]
    
    var str2 = "helloabcmyabcpig";
    var res_reg = str2.split(/abc/);  // ["hello", "my", "pig"]

    4、match

    原文:https://www.runoob.com/jsref/jsref-match.html

    match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

     match() 方法将检索字符串 String Object,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。

    语法

    string.match(regexp)

    参数值

    参数描述
    regexp 必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。

    返回值

    类型描述
    Array 存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。 如果没找到匹配结果返回 null 。
    var str = "I am handsome boy very handsome";
    var res = str.match(/handsome/gi);  // ["handsome", "handsome"]

    五、如何判断某ip地址是否在指定的ip地址段范围内

    我们可以先把IP转换成数字,然后再进行比较

    /*
    把ip转为数值
    */
    function ip2num(ip) {
        let ip_array = ip.split(".");
        let number = parseInt(ip_array[0]) * 256 * 256 * 256 + 
                        parseInt(ip_array[1]) * 256 * 256 +
                        parseInt(ip_array[2]) * 256 + 
                        parseInt(ip_array[3]);
        return number;
    }
    
    /*
    把数值转换为ip,方法一
    */
    function num2ip(number) {
        // Math.floor(x): 返回小于等于x的最大整数
        let ip = Math.floor(number / (256 * 256 * 256)) + "." +
                        Math.floor(number % (256 * 256 * 256) / (256 * 256)) + "." +
                        Math.floor(number % (256 * 256) / 256) + "." +
                        Math.floor(number % 256);
        return ip;
    }
    
    /*
    把数值转换为ip,方法二
    */
    function num2ip2(number) {
        // Math.floor(x): 返回小于等于x的最大整数
        var a = Math.floor(number / (256 * 256 * 256));
        var b = Math.floor(number / (256 * 256) - a * 256);
        var c = Math.floor(number / (256) - a * 256 * 256 - b * 256);
        var d = Math.floor(number - a * 256 * 256 * 256 - b * 256 *256 - c *256);
        let ip = `${a}.${b}.${c}.${d}`;
        return ip;
    }
    
    
    var ip = "127.0.0.2";
    var target_ip = "127.0.0.1-127.0.0.10";
    var target_1 = target_ip.split("-")[0];
    var target_2 = target_ip.split("-")[1];
    if (ip2num(ip) >= ip2num(target_1) && ip2num(ip) <= ip2num(target_2)) {
        // 满足条件
        console.log("success");
    } else {
        console.log("failed");
    }

    六、从字符串中截取相应的域名

    var reg = /[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?/;  
    var host = reg.exec("http://www.test.com:9000/article/p/2");  
    console.log(host[0]);

    七、毫秒转为日期:天时分秒

    // 毫秒转为日期:天时分秒
    function getDuration(millisecond) {
        var time = "";
        
        var days = millisecond / 1000 / 60 / 60 / 24;
        var daysRound = Math.floor(days);
        
        var hours = millisecond / 1000 / 60 / 60 - 24 * daysRound;
        var hoursRound = Math.floor(hours);
    
        var minutes = millisecond / 1000 / 60 - 24 * 60 * daysRound - 60 * hoursRound;
        var minutesRound = Math.floor(minutes);
    
        var seconds = millisecond / 1000 - 24 * 60 * 60 * daysRound - 60 * 60 * hoursRound - 60 * minutesRound;
    
        if (daysRound) { 
            time = daysRound + "天"+ hoursRound + "小时"+minutesRound + "分钟"; 
        } else if (!daysRound && hoursRound) { 
            time = hoursRound + "小时"+minutesRound + "分钟"; 
        } else if (!daysRound && !hoursRound && minutesRound) {
            time = minutesRound + "分钟"; 
        } else if (!daysRound && !hoursRound && !minutesRound && seconds) {
            time = seconds + "秒"; 
        }
        return time; 
    }
  • 相关阅读:
    MySQL如何监测是否命中索引? mysql执行计划解读
    mysql修改用户密码的方法及命令
    php7 安装rabbitmq 扩展 amqp扩展
    HAProxy的高级配置选项-Web服务器状态监测
    HAProxy 配置SSL
    nginx request_body 为空 没有参数 ;关于client_max_body_size client_body_buffer_size配置
    mysql 存储过程 函数的 导入导出
    postman设置客户端证书
    python字符串和列表之间相互转换
    python 发邮件 带附件 给多人发邮件
  • 原文地址:https://www.cnblogs.com/Zzbj/p/15913195.html
Copyright © 2020-2023  润新知