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)被当做一个字符匹配

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

替代字符
|

. 表示模糊匹配任意字符

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

\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);
posted @ 2018-07-06 21:03  飞刀还问情  阅读(233)  评论(0编辑  收藏  举报