js 正则

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>正则</title>
</head>
<!--正则  
一、特殊符号
  1、\转义字符 
  2、^ 开头
  3、$结尾
二、次数量词
  *:0次到多次
  ?:0次或1次
  +:1次或多次
  {m}:m次
  {m,n}:m到n次
三、
  .:除了\n(换行)以外的任意字符
  ():分组 把一个大正则划分成几个小正则
  x|y:x或y中的一个
  [a-zA-Z0-9]:
  [xyz]:xyz三个以外的任何字符
  [^xyz]:除了xyz三个以外的任何字符
  \d:0-9之间的一个数字
  \D:除了0-9之间的数字以外的任何字符
  \b:一个边界符
  \w:数字 字母 下画线等同于[a-zA-Z0-9_]
  \W:
  \s:空白字符(空格 字表符 换页符)
  注意中括号不能识别多于两位数[12]只能表示1或2 [12-54]只能表示1 或2-5之间的数 或4
-->

<body>
    <script type="text/javascript">
        var reg = /\d/
        console.log(reg.test("ss23")); //true
        console.log(reg.test("ss")); //false
        reg = /^\d$/;
        console.log(reg.test("ss")); //false
        console.log(reg.test("34343")); //false
        console.log(reg.test('5')); //true
        reg = /^0.2$/; //表示以0开头2结尾的任何字符
        console.log(reg.test("02")) //false
        console.log(reg.test("0.2")) //true
            //匹配正常数字
        var num_reg = /^[-\+]?(\d|([1-9]\d+))(\.\d+)?$/ //匹配正常数字
        console.log(num_reg.test("12.3"))
        console.log(num_reg.test("12"))
        console.log(num_reg.test("-12"))
        console.log(num_reg.test("+12"))
        console.log(num_reg.test("0.2"))
        console.log(num_reg.test("0.2"))
        console.log(num_reg.test("0244"))
            // /\d+/这样创建不能进行字符串拼接 
        var name = "howhy"
        var reg1 = /^\d+"+name+"\d+$/g //这样不行的所有变量都不进行解析都是原字符
        console.log(reg1.test("222howhy5555")) //false
        console.log(reg1.test('333""nameeee"888')) //true
        reg2 = new RegExp("^\\d+" + name + "\\d+$", "g") //类创建参数都是字符串 所以可以进行字符串拼接但\d \w需要\\d \\w 
        console.log(reg2.test("222howhy5555")) //true
        console.log(reg2.test('333""nameeee"888')) //false
            //匹配18-65年龄的数字 分为三段 18-19 20-59 60-65
        var age_reg = /^(1[8-9]|[2-5]\d|6[0-5])$/;
        //验证邮箱
        var email_reg = /[\w.-]+@[0-9a-zA-Z]+(\.[a-zA-Z]{2,4}){1,2}/
            //中国姓名
        var name_reg = /^[\u4e00-\u9fa5]{2,4}$/
            //身份证
        var card_reg = /^\d{17}(\d|X)$/
            //exec数组捕获 
            //1、懒惰性(没有加g每次lastIndex都从0开始 若加g则每次从上一次匹配后开始) 每次只能捕获第一个匹配的内容,(i 忽略大小写 g全局匹配)
            //2、贪婪性 每次匹配结果都是最长的 在量词后加问号
        var reg10 = /\d+/g;
        // var ret = reg10.exec("aaa1231www888") //1231
        // console.log(ret)
        var myArray;
        var retArr = [];
        while ((myArray = reg10.exec("aaa1231www888")) !== null) {
            retArr.push(myArray[0])

        }
        console.log(retArr); //[1231,888]
        //字符串match方法 会把所有结果匹配出来 
        var str = "444ssaa232aaz000"
        console.log(str.match(reg10)) //["444", "232", "000"]
            //分组 ?:只匹配不捕获
        var reg11 = /^(\w)(\w)\2\1$/; //\2表示第二个\w就是f \1表示第1个\w就是a
        console.log(reg11.test("affa")) //true
        var reg12 = /^(\d{2})(\d{4})(\d{4})(\d{2})(\d{2})(?:\d{2})(\d)(\d|X)$/
        var str12 = "411321198510353238"
        console.log(reg12.exec(str12)) //["411321198510353238", "41", "1321", "1985", "10", "35", "3", "8", index: 0, input: "411321198510353238", groups: undefined]
        console.log(str12.match(reg12)) //["411321198510353238", "41", "1321", "1985", "10", "35", "3", "8", index: 0, input: "411321198510353238", groups: undefined]
            //正则替换replace
        var str13 = "howhyaawerhowhycccc";
        console.log(str13.replace(/howhy/g, "4444"))
        var str14 = "20201217"
        var numDigit = ["", "", "", "", "", "", "", "", "", ""]
        str14 = str14.replace(/\d/g, function() {
            var num = arguments[0];
            console.log(num);
            return numDigit[num];
        })
        console.log(str14)
        var str15 = "my name is {0},my age is {1},i come from {2},i live in {3} now";
        var arr15 = ["howhy", 22, "河南", "广东"];
        var reg15 = /{(\d+)}/g;
        console.log(str15.match(reg15))
        str15 = str15.replace(reg15, function() {
            console.log(arguments[1])
            return arr15[arguments[1]]
        })
        console.log(str15)
            //获取字符串出现最多的字符
        var str16 = "hellomynameishowhyhhaa";
        var reg16 = /[a-z]/gi;
        var obj = {};
        str16.replace(reg16, function() {

            if (arguments[0] in obj) {
                obj[arguments[0]] += 1;
            } else {
                obj[arguments[0]] = 1;
            }

        })
        console.log(obj)
        var max = 0;
        for (let a in obj) {
            if (obj[a] > max) {
                max = obj[a]
            }
        }
        console.log(max)
        var str17 = "http://localhost/test?name=howhy&age=12&mid=33333";
        var reg17 = /\??(\w+)=(\w+)&?/g;
        var obj17 = {};
        str17.replace(reg17, function() {
            obj17[arguments[1]] = arguments[2];
        })
        console.log(obj17)
        var str18 = "2020-2-8 11:20:30";
        var reg18 = /(\d{4})-(\d{1,2})-(\d{1,2}) (\d{2}):(\d{2}):(\d{2})/g;
        var dd = ["", "", "", "", "", ""];
        var str18_ret = "";
        str18.replace(reg18, function() {
            var argsArr = Array.prototype.slice.call(arguments, 1, 7)
            for (let i in argsArr) {
                console.log(argsArr[i])
                if (argsArr[i] < 10) {
                    argsArr[i] = "0".concat(argsArr[i]);
                }
                str18_ret += argsArr[i] + dd[i];
            }
        })
        console.log(str18_ret);
    </script>
</body>

</html>

 

posted @ 2020-12-18 16:43  howhy  阅读(197)  评论(0)    收藏  举报