• 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);
    
                // tian@163.com
    			/*var box = /^[^0-9]w+@w+.(com|net|org)$/;
    			var str = "tian@163.comx";
    
    			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)被当做一个字符匹配

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

    替代字符
    |

    . 表示模糊匹配任意字符

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

     表示边界

                /*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{
    				 400px;
    				height: 200px;
    				background-color: orange;
    				border: 1px solid black;
    				text-align: center;
    				padding: 20px;
    				margin: 100px auto;
    			}
    			#login input{
    				margin-top: 10px;
    				 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 换行修饰符
    只要遇到 ,行首重新计算

                var str = "1.bai10du
    2.google
    3.bing";
    			// alert(str);
    			//把所有的数字换成*
    
    			/*
    				m 换行修饰符
    				只要遇到
    ,行首重新计算
    			*/
    
    			var res = str.replace(/^d/gm, "*");
    			alert(res);
    
    			/*
    				1、语法记下去
    				2、表单验证改成正则
    			*/
    

    7、滑动条

        <head>
    		<meta charset="UTF-8">
    		<title>Document</title>
    		<style>
    			#slide{
    				 500px;
    				height: 30px;
    				border: 1px solid black;
    				margin: 100px auto;
    				position: relative;
    			}
    			#block{
    				height: 30px;
    				 20px;
    				background-color: blue;
    				position: absolute;
    				left: 0px;
    				top: 0px
    			}
    			#fill{
    				 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);
    
  • 相关阅读:
    windows phone 7 开发工具合集
    Windows Phone中文开发资源集中营
    Windows Phone 7 输入法升起时,保持页面不被推起
    winXP控制面板TTS语音打不开卡顿SDK开发无法播放中文解决方法MFC调用代码
    c#winform不要通过文件右键属性去复制文件路径,会复制到隐藏的字符,打印路径会看见问号,导致无法打开指定文件
    密钥读yao还是yue?
    office access accdb驱动目录注册表路径
    c#winform判断是否为数字型字符串
    c#序列化json文件为字符串更改json对象内容
    在C#HttpWebRequest 设置超时方法
  • 原文地址:https://www.cnblogs.com/zhongchao666/p/9275534.html
Copyright © 2020-2023  润新知