14、正则表达式

==要求:阅读无障碍==;

1、正则表达式

1、比较复杂正则表达式不需要写
2、正则表达式阅读没有障碍

作用:
1、正则表达式是用来进行表单验证
2、正则表达式就是一个功能更加强大的字符串。
概念:
1、正则表达式是对象
2、RegExp对象

            创建正则表达式
            参数:第一个参数 创建正则表达式的字符串
                 第二个参数 修饰符
                    i 忽略大小写
                    g 全局匹配
                    m 换行匹配

1、通过new运算符创建

            var box = new RegExp("hello", "igm");
            alert(box); // /hello/gim

2、省略new运算符也可以创建

            var box = RegExp("hello", "igm");
            alert(box);  // /hello/gim

3、直接通过常量进行复制

             var box = /hello/igm;

正则表达式对象
函数:

test
格式:正则.test(字符串)
功能:在字符串中匹配正则,判断这个正则是否在字符串中存在
返回值:如果存在返回true,,不存在返回false;

exec
格式:正则.exec(字符串)
功能:在字符串中匹配正则,判断这个正则是否在字符串中存在
返回值:如果存在返回,装有匹配到的字符串一个数组,,否则返回的是null

            var str = "This is a pple";
            // var res = /apple/i.test(str);
            var res = /apple/i.exec(str);
            alert(res);
            // [email protected]
            /*var box = /^[^0-9]\w+@\w+\.(com|net|org)$/;
            var str = "[email protected]";

            alert(box.test(str));*/

2、正则使用字符串的方法

字符串对象的方法
格式:字符串对象.函数

match
功能:在字符串中匹配正则,判断这个正则是否在字符串中存在
返回值:如果存在,返回存有匹配到字符串的数组,否则返回null

search
格式:字符串对象.search(字符串/正则);
功能:查找正则第一次在字符串中的位置

replace
格式:字符串.replace(正则/字符串, 新字符串)
功能:字符串替换

split
格式:字符串.split(分隔符/正则)

            /*var str = "This is a pple";
            var res = str.match(/apple/i);
            alert(res);*/


            /*var str = "This is a Apple";
            var res = str.search(/apple/i);
            alert(res);*/

            /*var str = "This is a Apple apple Apple";
            // var res = str.replace("apple", "orange");

            var res = str.replace(/apple/ig, "orange");
            alert(res);*/

            var str = "This m isMa Apple apple Apple";
            var res = str.split(/m/i);
            alert(res)

3、元字符

正则表达式

元字符:一堆有特殊含义的字符。

单个元字符

匹配任意字符
[a-zA-Z0-9_] 限定单个字符匹配范围;
[^0-9] 匹配除这个范围内的所有字符; ^在[]内,
(可以把正则的符号放进[]中解析为字符);
\w 等价于 [a-zA-Z0-9_] 限定单个字符匹配范围是数字、字母下划线 ;
\W 等价于 [^a-zA-Z0-9_] 限定单个字符匹配范围是除了数字、字母下划线;
\d 等价于 [0-9];
\D 等价于 [^0-9];
\s 代表匹配单个空白字符;
\S 代表匹配非空白字符;

重复字符
x+ 匹配至少一个x字符
x? 匹配0或者1个x字符
x* 匹配任意个x字符
x{m,n} 匹配至少m个,至多n个x字符
x{m} 匹配m个x字符
(xyz) 小括号里的(xyz)被当做一个字符匹配

锚字符
^ 行首匹配 行首字符限定死,[]外
$ 行尾匹配 行尾字符限定死

替代字符
|

. 表示模糊匹配任意字符

 转义符 (将正则的符号放在\后,解析为字符串);

\b 表示边界

            /*var str = "bing";
            var box = /google|baidu|bing/;
            alert(box.test(str));*/


            /*var str = "xdadadadagoogle";
            var box = /google$/;

            alert(box.test(str));*/

转义字符

        .是  \.  字符.
        
        *是  \*  字符*
            var str = "go1gle";
            var box = /go\.gle/;
            alert(box.test(str));

4、一些练习

1、匹配邮编的正则
            var box = /^\d{6}$/;
            alert(box.test(123456));
2、压缩包文件
判断文件是不是压缩包。
                1.zip  2.rar  3.rg
                .zip
            /*var box = /^\w+\.(zip|rar|rg)$/;
            alert(box.test("hell_.o.zip"))*/

            var str = " h el  l o  ";
            // var res = str.replace(/ /g, "");
3、要求只能删除首部和尾部的空格
            // var res = str.replace(/^\s+/, "");
            // var res = str.replace(/^\s+|\s+$/g, "");

            alert("|" + res + "|");

5、表单验证_正则

    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            #login{
                width: 400px;
                height: 200px;
                background-color: orange;
                border: 1px solid black;
                text-align: center;
                padding: 20px;
                margin: 100px auto;
            }
            #login input{
                margin-top: 10px;
                width: 280px;
                height: 22px;
                font-size: 15px
            }
        </style>
    </head>
    <body>
        <div id = "login">
            <input id = "username" type="text" placeholder="用户名" />
            <br/ >
            <span id = "username_span">6~18个字符,可使用字母、数字、下划线</span><br />
            <input id = "password" type="text" placeholder="密码" />
        </div>
    </body>
    <script>
        var oUsername = document.getElementById("username");
        var oUsername_span = document.getElementById("username_span");

        //失去焦点的时候。判断是否正确
        oUsername.onblur = function(){
            // 1、如果误输入空格,自动纠错 / /g 全局匹配空格
            oUsername.value = oUsername.value.replace(/\s/g, "");
            var oValue = oUsername.value;

            // 2、判断长度是否6~18位
            if(oValue.length > 18 || oValue.length < 6){
                oUsername_span.innerHTML = "长度应为6~18个字符";
                //设置颜色为红色
                oUsername_span.style.color = "red";
            }else if(/^\d/.test(oValue)){
                //3、行首为数字
                oUsername_span.innerHTML = "首字母不能为数字";
                //设置颜色为红色
                oUsername_span.style.color = "red";
            }else if(/\W/.test(oValue)){
                oUsername_span.innerHTML = "只能由数字、字母、下划线组成";
                oUsername_span.style.color = "red";
            }else{
                oUsername_span.innerHTML = "符合要求";
                oUsername_span.style.color = "green";
            }
            
        }

    </script>

6、换行匹配

m 换行修饰符
只要遇到\n,行首重新计算

            var str = "1.bai10du\n2.google\n3.bing";
            // alert(str);
            //把所有的数字换成*

            /*
                m 换行修饰符
                只要遇到\n,行首重新计算
            */

            var res = str.replace(/^\d/gm, "*");
            alert(res);

            /*
                1、语法记下去
                2、表单验证改成正则
            */

7、滑动条

    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            #slide{
                width: 500px;
                height: 30px;
                border: 1px solid black;
                margin: 100px auto;
                position: relative;
            }
            #block{
                height: 30px;
                width: 20px;
                background-color: blue;
                position: absolute;
                left: 0px;
                top: 0px
            }
            #fill{
                width: 0px;
                height: 30px;
                background-color:red;
            }
            #span1{
                position: absolute;
                top: 30px;
                left: 0px
            }
        </style>
        <script>
            window.onload = function(){
                var oSlide = document.getElementById("slide");
                var oBlock = document.getElementById("block");
                var oFill = document.getElementById("fill");
                var oSpan1 = document.getElementById("span1");

                //记录相对位置
                var offsetX = 0;

                oBlock.onmousedown = function(event){
                    var e = event || window.event;
                    offsetX = e.clientX - oBlock.offsetLeft;
                    
                    document.onmousemove = function(event){
                        var e = event || window.event;

                        var l = e.clientX - offsetX;
                        if(l < 0){
                            l = 0;
                        }
                        if(l > 480){
                            l = 480;
                        }
                        //改变滑块的位置
                        oBlock.style.left = l + "px";
                        //填充的内容宽和滑块的left值一致
                        oFill.style.width = l + "px";

                        oSpan1.innerHTML = parseInt(l / 480 * 100) + "%";
                        
                    }
                }
                document.onmouseup = function(){
                    document.onmousemove = null;
                }

            }
        </script>
    </head>
    <body>
        <div id = "slide">
            <div id = "block"></div>
            <div id = "fill"></div>
            <span id = "span1">0%</span>
        </div>
    </body>

ECMA6新增

1、let关键字

ECMA6
var 用关键字 let代替
通过var声明的变量,作用域以函数的大括号为界限的,
通过let声明的变量,作用域以大括号为界限的,包括if for swtich

            /*if(true){
                var num = 10;
                alert(num);
            }

            alert(num);*/

            /*if(true){
                let num = 10;
                alert(num);
            }

            alert(num);*/


            /*for(var i = 0; i < 5; i++){
                setTimeout(function(){
                    alert(i);
                }, 2000);
            }*/

            /*for(let i = 0; i < 5; i++){
                setTimeout(function(){
                    alert(i);
                }, 2000);
            }


            alert("循环执行完了");*/


            /*for(var i = 0; i < 5; i++){
                for(var i = 0; i < 5; i++){
                    console.log(i);
                }
            }*/

            for(let i = 0; i < 5; i++){
                for(let i = 0; i < 5; i++){
                    console.log(i);
                }
            }

2、const

var let 声明变量
const 声明不可修改的变量/常量

            /*var num = 100;
            num = 20;
            alert(num);*/

            /*const IP = "10.30.155.73";

            alert(IP);
            IP = 10;
            alert(IP);

3、箭头函数

            /*function show(){
                alert(123);
            }
            show();
            */
            /*
                声明函数的方式进行简化  箭头函数
            */

            /*function add(num1, num2){
                return num1 + num2;
            }*/

            /*var add = (num1, num2) => num1 + num2;

            alert(add(10, 20));*/

            /*
                无参函数
            */
            /*function print(){
                alert("hello world");
            }*/

            // print();

            /*var print = () => {
                alert("hello world");
            }

            print();*/

            /*
                一个参数函数,带return返回值
            */
            /*function add(x){
                return x + 10;
            }
            alert(add(5));*/

            /*var add = (x) => {
                return x + 10;
            }*/
            /*var add = x => x + 10;

            alert(add(5));*/

            /*
                多个参数
            */
            /*function add(x, y){
                return x + y;
            }

            var add = (x, y) => {
                return x + y;
            }*/

            /*var add = (x, y) => x + y;
            
            alert(add(10, 20));*/



            /*
                箭头函数的注意点:
            */
            /*function show(){
                return {
                    name: "小明",
                    age: 18
                }
            }
            var obj = show();
            alert(obj.name);*/

                
            /*
                【注】如果返回值是对象的时候,一定要记得加小括号。
            */

            /*var show = () => ({
                name: "小明",
                age: 18
            });

            var obj = show();
            alert(obj.name);*/


            /*
                了解
            */

            var obj = {
                name: "小明",
                age: 18,
                show: function(){
                    /*setInterval(function(){
                        alert(this);
                        alert(this.name);
                    }, 4000);*/

                    setInterval(() => {
                        alert(this.name)
                    }, 4000);
                }
            }

            // obj.show();


            // obj.show(); //当show函数被obj去调用的时候,this指向obj

            //系统在调用传入函数
            // setInterval(obj.show, 4000);

            
            /*window.onload = function(){
                document.onclick = obj.show;
            }*/

4、例子

【注】this 永远指向当前函数的主人。

            function show(){
                alert(this);
            }
            // show(); //object Window

            /*window.onload = function(){
                document.onclick = show;
            }*/
            //show赋给了定时器,定时器系统调用,系统调用的函数。
            // setInterval(show, 2000);


            var xiaoming = {
                name: "小明",
                age: 18,
                show: function(){

                    //window
                    /*setInterval(function(){
                        alert(this)
                    }, 4000);*/

                    //箭头函数
                    setInterval(() => {
                        alert(this.name);
                    }, 4000);
                }
            }

            xiaoming.show();

5、解构

        // var x = 10, y = 20, z = 30;

(1)中括号赋值

            /*let [x,y,z] = [10,20,30];
            alert(x + ", " + y + ", " + z);*/

            /*let [x,[a,b],y] = [10,[20,30],40];
            alert(a + ", " + y);*/

            /*let [x,[a,b],y] = [10,[20],30];

            alert(a + ", " + y + ", " + b);*/

<1>交换两个变量

            let [a,b] = [10,20];
            [a,b] = [b,a];
            alert(a + ", " + b);

<2>函数,可以返回多个值

            function show(){
                return ["结果1", "结果2", "结果3"];
            }

            let [x,y,z] = show();
            alert(x + "," + y + "," + z);

(2)大括号赋值
/*var {name,age,sex} = {
age: 18,
name: "小明",
sex: "男"

        }
        alert(name + ", " + age + ", " + sex);*/

<3>好处

        /*function show({name, age = 40, sex}){
            alert(name + ", " + age + ", " + sex);
        }

        show({
            name: "小明",
            sex: "男",
            age: 18
        })*/



        /*
            了解
        */
        var arr = [10, 20, 30, 40];

        //固定格式 var {0:head,arr.length - 1:last} = arr;  arr.length -1 必须写成数字
        var {0:head,3:last} = arr;
        alert(head); //arr[0];
        alert(last); //arr[3]

6、字符串

'' "" 都是字符串
ECMA6
用:``

 链接下一行字符串

            /*var str = "sdadada\
            ddadadadad";
            alert(str);*/

1、好处,换行不会断

            var str = `ddadadadadad
            dadadadad`;
            // alert(str);

2、字符串拼接的时候

            var name = "小明";
            var age = 18;
            // var str = "我叫" + name + "今年" + age + "岁";
            // alert(str);

格式:占位符 ${变量}

            var str = `我叫${name}今年${age}岁`;
            alert(str);

7、ECMA6新增数组的方法

        <script>
            window.onload = function(){
                var aLis = document.getElementsByTagName("li");

本质上不是数组,使用起来类似于数组

                // alert(aLis.length);
                // aLis.push("hello");

aLis转成真正的数组
Array.from()
将aLis转成真正的数组。

                // alert(aLis); //object HTMLCollection
                /*var arr = Array.from(aLis);
                arr.push("hello");
                alert(arr);*/

看一看就行

copyWithin
1,2,7,8,9,6,7,8,9,0
参数:
第一个参数:从哪个下标开始去替换
第二、三个参数:替换成的元素的范围
start end

                /*var arr = [1,2,3,4,5,6,7,8,9,0];

                arr.copyWithin(2, 6, 9);
                alert(arr); //1,2,7,8,5,6,7,8,9,0*/

find 查找元素
功能:在数组中查找符合return后面表达式的元素,查找到第一个就停止

                var arr = [1,2,3,4,5,6,7,8,9,0];
                var res = arr.find(function(item, index, array){
                    alert(item);
                    return item > 5;
                })
                alert(res);
            }
        </script>
    </head>
    <body>
        <ul>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </body>

8、Symbol

        <script>
            var a = Symbol();
            var b = Symbol();
            var c = Symbol("aaaa");
            var d = Symbol("aaaa");

通过Symbol声明的变量,和任何数据都不相等,除了他自己。

            /*alert(a == b); //false
            alert(c == d); //false
            alert(a == a); //true*/
                买辆车,选车的颜色
                让你的代码看起来更加的生动。
            
            var RED = Symbol();
            var BLUE = Symbol();
            var PINK = Symbol();

            function changeCarColor(color){
                switch(color){
                    case RED:
                        alert("red");
                        break;
                    case BLUE:
                        alert("蓝色");
                        break;
                    case PINK:
                        alert("粉色");
                        break;
                    default:
                        break;
                }
            }
        </script>

9、set和map

了解

复合数据类型:
set 集合
1、不重复
2、无序

        let cars = new Set();

        /*
            给集合里面插元素
            格式:集合对象.add(元素)
        */
        cars.add("宝马");
        cars.add("凯迪拉克");
        cars.add("路虎");
        cars.add("玛莎拉蒂");
        cars.add("路虎");
        cars.add(new String("abc"));
        cars.add(new String("abc"));
        // console.log(cars);

遍历方式
1、key

            for(let item of cars.keys()){
                alert(item);
            }

2、通过value

            for(let item of cars.values()){
                alert(item);
            }

3、通过key和value遍历

            for(let item of cars.entries()){
                alert(item);
            }

集合Set: 相当于不能存储函数的对象。

复合数据类型:map 映射 键和值不一样
英汉词典

            let map = new Map();
            //添加元素
            //格式 map.set(key, value);
            map.set("王五", "厨子");
            map.set("李四", "司机");
            map.set("张三", "程序员");

            // console.log(map);
            /*
                取值
                map.get(key)
            */
            // alert(map.get("王五"));

            /*
                遍历
            */

            for(let [key,value] of map){
                alert(key + ", " + value);
            }

数组 对象
1、数组(只能存数据) 下标_数字 (顺序,能存重复元素)
2、对象(既能存数据,又能存函数) 下标_属性名 (键不能重复)
3、集合(只能存数据) (无序,不能重复) 类似不能存函数的对象,这个对象键和值相同
4、映射(只能存数据) (无序,不能重复) 类似不能存函数的对象,这个对象键和值可以不同

10、集合去重

            var arr = [10, 20, 30, 20, 10];
            var newArr = [...new Set(arr)];
            alert(newArr);

//数组 => 集合

            let set = new Set(arr);
            // console.log(set);

//集合 => 数组

            var newArr = [...set];
            alert(newArr);

猜你喜欢

转载自www.cnblogs.com/zhongchao666/p/9275534.html