JS正则表达式

JavaScript022

JS正则表达式,第1张

一. 正则表达式

正则表达式:其实就是一种匹配规则,用于检索字符串

定义正则表达式的两种方式:1.直接定义 2.构造函数定义

那么正则表达式正则强大的地方是它可以写 通配符(拥有特殊含义的字符)

二. 通配符

\w 表示:字母、数字、下划线

\W 表示:除了字母、数字、下划线以外的字符

\d 表示:数字

\D 表示:非数字

^ 表示:以^符号后面的第一个字符开头

表示:以表示:以符号前面的第一个字符结尾

{n} 表示:重复n次

{n,m} 表示:重复n到m次

[xyz] 表示:其中任意一个字符

+ 表示:重复前一项1次或多次 等价于 {1,}

* 表示:重复前一项0次或多次 等价于 {0,}

? 表示:重复前一项0次或1次 等价于 {0,1}

. 表示:除了换行符以外的任意一个字符

\. 表示:.字符 ^ 表示:^ \表示:表示:

可以用()将多个字符作为一个整体

\w 等价于 [0-9a-zA-Z_]

| 表示:或者

[\u4E00-\u9FA5] 是常用汉字的unicode编码范围

三. 正则练习

四. 正则表达式配合字符串的方法

replace()方法

默认情况下,replace()方法,只会替换字符串中匹配的第一段内容

使用正则表达式,添加全局匹配修饰符g,可以替换匹配全部内容

使用正则表达式,添加忽略大小写修饰符i,在匹配内容时会忽略大小写

search()方法

可以通过正则表达式查找位置

五. 添加学生练习

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>添加学生</title>

    <style>

        .err{

            color: red

        }

        .ok{

            color: green

        }

    </style>

</head>

<body>

    <form>

        <table>

            <tr>

                <td>姓名:</td>

                <td>

                    <input type="text" id="name">

                    <span id="nameMsg"></span>

                </td>

            </tr>

            <tr>

                <td>年龄:</td>

                <td>

                    <input type="text" id="age">

                    <span id="ageMsg"></span>

                </td>

            </tr>

            <tr>

                <td>性别:</td>

                <td>

                    <input checked name="sex" type="radio" value="0">男

                    <input name="sex" type="radio" value="1">女

                </td>

            </tr>

            <tr>

                <td>爱好:</td>

                <td>

                    <input name="hobby" type="checkbox" value="抽烟">抽烟

                    <input name="hobby" type="checkbox" value="喝酒">喝酒

                    <input name="hobby" type="checkbox" value="烫头">烫头

                    <input name="hobby" type="checkbox" value="睡觉">睡觉

                </td>

            </tr>

            <tr>

                <td>年级:</td>

                <td>

                    <select id="grade">

                        <option value="0">请选择</option>

                        <option value="1">大一</option>

                        <option value="2">大二</option>

                        <option value="3">大三</option>

                        <option value="4">大四</option>

                    </select>

                    <span id="gradeMsg">必须要选择一个年级</span>

                </td>

            </tr>

            <tr>

                <td>邮箱:</td>

                <td>

                    <input type="text" id="email">

                    <span id="emailMsg">请输入正确的邮箱格式</span>

                </td>

            </tr>

            <tr>

                <td>电话:</td>

                <td>

                    <input type="text" id="phone">

                    <span id="phoneMsg">请输入正确的电话格式</span>

                </td>

            </tr>

            <tr>

                <td>生日:</td>

                <td>

                    <input type="text" id="bornDate">

                    <span id="bornDateMsg">请输入正确日期格式</span>

                </td>

            </tr>

            <tr>

                <td></td>

                <td>

                    <button type="submit">提交</button>

                    <button type="reset">重置</button>

                </td>

            </tr>

        </table>

    </form>

    <script>

        //获取姓名文本框

        let name = document.querySelector('#name')

        //获取年龄文本框

        let age = document.querySelector('#age')

        //表单的提交事件

        document.querySelector('form').onsubmit = function(){

            // 返回true提交表单,返回false不提交表单

            if(checkName() &checkAge()){

                return true

            }else{

                return false

            }

        }

        //姓名文本框失去焦点

        name.onblur = checkName

        //验证姓名

        function checkName(){

            //定义验证姓名的正则

            let reg = /^[\u4E00-\u9FA5]{2,4}$/

            // 调用验证方法

            return checkInput("#nameMsg",name,reg,'姓名正确','姓名必须是2-4位汉字')

        }

        //年龄文本框失去焦点

        age.onblur = checkAge

        //验证年龄

        function checkAge(){

            //定义验证年龄的正则

            let reg = /^\d{1,2}$|^1([0-1]\d)|20$/

            // 调用验证方法

            return checkInput("#ageMsg",age,reg,'年龄正确','年龄必须是0-120之间')

        }

        //验证方法,参数分别是:span元素Id,表单元素对象,正则规则,验证成功消息,验证失败消息

        function checkInput(spanId,_this,reg,okMsg,errMsg){

            // 获取消息span

            let span = document.querySelector(spanId)

            //获取信息

            let val = _this.value

            if(!reg.test(val)){

                span.className="err"

                span.innerHTML = errMsg

                return false  //验证失败返回false

            }else{

                span.className="ok"

                span.innerHTML = okMsg

                return true  //验证成功返回true

            }

        }

    </script>

</body>

</html>

在H5开发中,正则表达式有很多地方都用得到,固整理了正则表达式的基本规则,和在JS中如何使用正则表达式,做了简单的介绍。

当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。它会在RegExpObject的 lastIndex属性指定的字符处开始检索字符串 string。当 exec()找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当exec() 再也找不到匹配的文本时,它将返回null,并把lastIndex 属性重置为 0。

eg:全局正则表达式

本篇主要针对正则基础的阐述,如果希望在熟练地应用到开发中还需要多多练习。

在JavaScript中,正则表达式通常用于两个字符串方法:search()和replace()。

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

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

正则表达式的特点是:

1、灵活性、逻辑性和功能性非常强;

2、可以迅速地用极简单的方式达到字符串的复杂控制。

3、对于刚接触的人来说,比较晦涩难懂。

由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。