JavaScript正则表达式详解

正则表达式概述

正则表达式(Regular Expression)由一些普通字符和特殊字符组成,是描述字符串规则的表达式,用于匹配字符串组合的规则,同时正则表达式本身也是一个对象。

正则表达式特点

  • 非常灵活
  • 逻辑性强
  • 可以用简单的方式对字符串进行复杂的控制

如何创建正则表达式

  • 字面量创建
 var 变量名 = /表达式/[模式修饰符]
  • 使用new RegExp创建
 var reg = new RegExp('正则表达式','匹配模式')

test()方法

使用这个方法可以检测一个字符串是否复合正则表达式的规则
如果符合返回true,否则返回false。

正则表达式相关符号

模式修饰符

                g:实现全局匹配
                i:忽略大小写
                m:实现多行匹配
                u:以Unicode编码执行正则表达式

边界符

                ^:匹配行首的文本(以给定字符开头)
                $:匹配行尾的文本(以给定字符结尾)
        var reg3 = /^abc$/
        console.log(reg3.test('abc'))//true
        console.log(reg3.test('abcd'))//false
        console.log(reg3.test('abcabc'))//false

注意: 如果在正则表达式中同时使用了^ $则要求字符串完全符合正则表达式。

常见预定义符

                .:表示匹配除了'\n'以外的任何单个字符
                \d: 匹配0-9之间的任意字符 相当于[0-9]
                \D:匹配0-9之外的任意字符 相当于[^0-9]
                \w: 匹配任意的数字、字母、下划线 相当于[a-zA-Z0-9_]
                \W:匹配任意的数字、字母、下划线以外的所有字符 相当于[^a-zA-Z0-9_]
                \s: 匹配空格
                \S:匹配非空格

转义字符

		\  可以将正则表达式中的边界符 预定义符 修饰符转换为普通字符使用
		\. 表示 .
        \\ 表示 \

注意:因为RegExp的模式参数是字符串,所以某些情况下需要二次转义,所有元字符必须二次转义,包括转义字符序列。

        var s1 = '^abc\\1./23*edf&';
        var reg5 = /\.|\$|\*|\^|\\/gi;
        console.log(s1.match(reg5));

在这里插入图片描述
字符范围匹配:

                [cat]:匹配字符集合中任意一个c、a、t
                [^cat]:匹配除c、a、t之外的字符
                [A-z]: 匹配任意大小写字母
                [A-Z]:匹配所有大写字母
                [^A-Z]:匹配除了大写字母之外的其他字符
                [a-z]:匹配所有小写字母
                [^a-z]: 匹配除了小写字母之外的其他字符
                [a-zA-Z0-9]:匹配任意字母和数字
                [^a-zA-Z0-9]:匹配除了数字、字母之外的字符
                [\u4e00-\u9fa5]:匹配所有的中文字符

量词符

                ? 匹配 ?前面的字符0次或1+  匹配 + 前面的字符1次或多次
                *  匹配 * 前面的字符0次或多次
                {n} 匹配 {} 前面的字符n次
                {n,} 匹配 {} 前面的字符至少n次
                {m,n} 匹配 {} 前面的字符m~n次

取反符:

                []^结合使用 即 ^[]

括号字符:

                catch|er 只能匹配catch或er
                cat(ch|er) 能匹配的是 catch cater
                abc{2} 能够匹配的是 abcc
                a(bc){2} 能匹配的是 abcbc

正则表达式与字符串相关的方法

在String中有许多方法可以搭配正则表达式来使用更加便捷

  • spilt()
    该方法可以将一个字符串你拆分为一个数组,方法中可以传递一个正则表达式作为参数,这样方法将会根据正则表达式去拆分字符串。
        var str = '1a2b3cc4d5e6f7';
        var result = str.split(/[A-z]/);
        console.log(result);// ["1", "2", "3", "", "4", "5", "6", "7"]
  • serch()
    可以搜索字符串中是否含有指定的内容,如果搜索到指定内容则会返回第一次出现的索引,没有则返回-1,它可以接收一个正则表达式作为参数.
        str = 'hello abc hello abc';
        result = str.search(/abc/);
        console.log(result);// 6
  • match()
    可以根据正则表达式从一个字符串中将符合条件的内容提取出来。
        str = '1aaaa2b3cc4d5e6f78AB9C0D';
        result = str.match(/[A-z]/gi);
        console.log(result);// ["a", "a", "a", "a", "b", "c", "c", "d", "e", "f", "A", "B", "C", "D"]
  • replae()
    可以将字符串这种指定内容替换成新的内容
    参数:
    1.被替换的内容 可以接收一个正则表达式
    2.新的内容默认只会替换第一个
		str = '1aaaa2b3cc4d5e6f78AB9C0D';
        result = str.replace(/[A-z]/gi,'');//使用正则表达式将所有字母用''替换
        console.log(result);// 1234567890

优先级

正则表达式优先级由高到低依次是:转义字符、圆括号、中括号、限定符、定位点和序列、或操作

JS实现用户注册页面

    <style>
        #username{
            margin-left: 15px;
        }
        #psw{
            margin-left: 12px;
        }
        button{
            margin-left: 40px;
        }
        .wrong{
            color: red;
        }
        .right{
            color: green;
        }
    </style>
</head>
<body>
    <form action="">
        用户名:<input type="text" id="username"><span></span>
        <br><br>&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="password" id="psw">
        <br><br>
        确认密码:<input type="password" id="psw2"><span id="measure"> </span>
        <br><br>
        <button type="button">注册</button>
        <button type="reset">重置</button>
    </form>
    <script>
        var reg = /^[A-Za-z0-9_-]{6,16}$/ // 匹配用户名
        var reg2 = /^[A-Za-z0-9_-]{8,16}$/ // 匹配密码
        var uname = document.querySelector('#username');
        var psw = document.querySelector('#psw');
        var psw2 = document.querySelector('#psw2');
        var sp = document.querySelector('span');
        var btn = document.querySelector('button');
        var mea = document.querySelector('#measure');
        uname.addEventListener('blur',function(){
            if(reg.test(this.value)){
                sp.className = 'right';
                sp.innerHTML = '用户名可用';
            }else{
                sp.className = 'wrong';
                sp.innerHTML = '用户名不可用';
            }
        })
        btn.addEventListener('click',function(){
            if(psw.value == psw2.value && reg2.test(psw.value&&psw2.value)){
                mea.className = 'right';
                mea.innerHTML = '密码可用';
            }else{
                mea.className = 'wrong';
                mea.innerHTML = '密码不可用';
            }
        })

    </script>

在这里插入图片描述
以下是一些常用的正则表达式方便大家可以直接使用

IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))

Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

InternetURL:[a-zA-z]+://[^\s]*^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

身份证号(15位、18位数字)^\d{15}|\d{18}$
.
短身份证号码(数字、字母x结尾)^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)^[a-zA-Z][a-zA-Z0-9_]{4,15}$

密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)^[a-zA-Z]\w{5,17}$

强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

日期格式:^\d{4}-\d{1,2}-\d{1,2}

中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值