十、正则表达式
RegExp : RegularExpression
判断字符串
创建
1、构造函数
let re = new RegExp();
console.log(typeof re, re);//object /(?:)/
2、字面量
书写格式:
let re = / xxx /匹配模式;
//如
let re = / xxx /g;
let re = / xxx /img;
// g:global 全局查找
// i:insensit 不区分大小写
// m:multiline 多行匹配
let str="1a2b3c"
let re = / xxx /;
//以后常用
let result = re.test(str);//str是否满足re
console.log(result);//返回布尔值
//学习时用,返回满足条件的值
console.log(str.match(re));
常用表达式
[ ] 内是一位,里面只要满足一个就行,1-9表示从1到9的数字
{ } 内填位数,和[ ]连用,如[n]{2}表示连续两位为n才满足
( ) 内填条件
\d 纯数字
\D 非数字
\w 单词字符(即 a-z 或 A-Z 或 0-9 或 _ )
\W 非单词字符
\s 空白字符(空格、回车等)
\S 非空白字符
1、以n开头 ^[n]
2、贪婪匹配 {n,m}
先取满足m个数的内容,不够取m-1个数的内容,直到取到n个个数的内容
{n,}
n到正无穷
//贪婪匹配
let str1 = `11122233344`;
let re = /[0-9]{1,5}/g;
console.log(str1.match(re));//[ '11122', '23334', '4' ]
re = /[0-9]{2,5}/g;
console.log(str1.match(re));//[ '11122', '23334' ]
//{n,} n到正无穷
str1=`11`;
re=/[0-9]{1,}/g;
console.log(str1.match(re));//[ '11' ]
re=/[0-9]{0,}/g;
console.log(str1.match(re));//[ '11', '' ]
3、n(?=m)
查找一个后面跟m的n;n(?!m)
查找一个后面不是m的n
let str = `1a2b3c4a`;
let re = /[0-9](?=a)/g;
console.log(str.match(re));//[ '1', '4' ]
re = /[0-9](?!a)/g;
console.log(str.match(re));//[ '2', '3' ]
手机号的规则
let tel = `13948507639`;
let re = /^[1][3-9][0-9]{9}$/g;
console.log(re.test(tel));//true
console.log(tel.match(re));//[ '13948507639' ]
十一、预编译
发生在执行的前一刻
【工作原理】
【函数作用域】
- 创建一个AO对象
- 形参和var声明的变量(不包含函数)(AO对象的属性名)
- 初始化属性名(即赋值undefined)
- 实参和形参相匹配
- 提升字面量声明的函数到函数第一行(函数名是AO的属性名,属性值是函数体
【全局作用域】
- 创建一个GO对象
- var声明的变量(不包含函数)(GO对象的属性名)
- 初始化属性名(即赋值undefined)
- 提升字面量声明的函数到第一行(函数名是GO的属性名,属性值是函数体
注:若函数中存在赋值未声明的变量,当函数被执行时,该变量才添加到GO