目录
2.1-3 使用已有的正则表达式创建,并可以选择性修改他们的修饰符
1.Date类型
1.1 如何创建date类型
使用new操作符和Date构造函数
let date1=new Date(); //创建一个日期对象
1.2 Date类型常用方法
在不给Date构造函数传入参数时,创建的对象将保存当前日期
1.2-1 Date.parse()
语法:new Date(Date.parse("日期"))
支持的日期格式 如下:
“月/日/年”,如:“5/23/2022”;
“月名 日,年”:“May 23,2022”
"年-月-日":如“2022-5-23或者2022/5/23”
如果直接把表示日期的字符串传给date构造函数,那么他会在后台调用Date。parse(),也就是说我们在赋值时候可以不调用Date.parse()方法,接下来我们看实例:
//下面两个例子相同
let date1=new Date(Date.parse('5/23/2019'));
let date2=new Date("5/23/2019");
1.2-2 Date.UTC()
传给Date.UTC()的参数是年、零起点月(1月是0,2月是1,以此类推)、日(1~31)、时(0~23)、分、秒、毫秒。其中年、月是必需的,如果不提供日,默认为1,其他默认为0(个人测试时,时默认为8)
语法:new Date(Date.UTC(日期))
与Date.parse()一样,Date.UTC()也可以隐式调用
//下面两个变量相同
let date1=new Date(Date.UTC(2022,4,23));
let date2=new Date(2022,4,23);
1.2-3 Date.now()
返回自1970年1月1日 00:00:00 UTC到当前时间的毫秒数
now()方法返回自1970年1月1日 00:00:00 UTC到当前时间的毫秒数
但是合理利用Date.now()可以计算出代码执行时间
//开始时间
let start=Date.now();
//调用函数
abc();
//结束时间
let stop=Date.now();
//计算运行时间
let result=stop-start;
console.log(result)
1.2-4 日期格式化方法
使用方法:Date.方法
格式化方法如下:
toDateString()——以特定于实现的格式显示星期几、月、日和年;
toTimeString()——以特定于实现的格式显示时、分、秒和时区;
toLocaleDateString()——以特定于地区的格式显示星期几、月、日和年;
toLocaleTimeString()——以特定于实现的格式显示时、分、秒;
toUTCString()——以特定于实现的格式完整的 UTC 日期。
这些方法的输出会因浏览器而异,因此不能用于用户界面上一致的显示日期,多用于测试,这里大家做一个了解
1.2-5其余方法
这里面给大家总结以后最常用的三种获取时间分量的方法
- getFullYear() 获取年
- getMonth() 获取月(0开始待变1月)
- getDate() 获取日
2.RegExp
2.1创建正则表达式
2.1-1.字面量创建(推荐)
var reg = /正则表达式/修饰符
2.1-2.构造函数创建
var reg = new RegExp('正则表达式','修饰符')
2.1-3 使用已有的正则表达式创建,并可以选择性修改他们的修饰符
let reg1=/cat/g;
console.log(reg1); //"/cat/g"
let reg2=new RegExp(reg1);
console.log(reg2); //"/cat/g"
选择性修改他们的修饰符
const reg3=new RegExp(reg1,"i");
console.log(reg3); //"/cat/i"
2.2正则表达式修饰符
g:全局模式,表示查找字符串的全部内容,而不是找到第一个匹配的内容就结束
i:不区分大小写,表示在查找匹配时忽略字符的大小写
m:多行模式,表示是查找到一行文本末尾时继续查找
y:粘贴模式,表示只查找从lastIndex开始及之后的字符串
u:Unicode模式,启用Unicode匹配
s:dotAll模式,表示元字符.匹配任何字符(包括\n或\r)
使用不同的修饰符可以创建出各种表达式,这里大家着重关注reg2与reg3
let reg1=/at/g; //匹配字符串中所有的at
let reg2=/[bc]at/i; //匹配字符串中第一个bat或cat,不区分大小写
let reg3=/.at/gi; //匹配字符串中所有以at结尾的三字符组合,不区分大小写
2.3元字符
所有元字符在正则表达式中必须转义
2.3-1常见的元字符
元字符包括:( [ { \ ^ $ | ) ] } ? * + .
2.3-2 常用的元字符
元字符 | 说明 |
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思 |
$ | 匹配字符串的结束 |
详解和示例:
(1). 匹配任何任意字符 例如 . 可以匹配 1,n,*,+,- ,等
(2) .\d\w\s 匹配第一个字符为数字,第二个字符为字母或数字、或下划线或汉字,第三字符为
空格的字符串 例如:11 ,2a , 1_
(3)^\d\d\d$ 匹配三个全部都为数字的字符串 例如: 123,456,789
还可以用于验证输入的字符串是否符合qq(身份证号)的验证 :
例如:^\d{8}$ 匹配8位数字的qq号,^\d{15}&匹配15位均为数字的身份证号
(4)\bOlive\b 匹配单词Olive 例如: I Love Oliver and Olive .这个时候返回的是Olive 而不是
Oliver,因为\b....\b返回的匹配的单词
2.3-3 常用的反义字符
除此之外还有一些常用的反义字符(元字符的反义):
反义字符 | 含义 |
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
详解和示例:
(1)\W 匹配除字母、数字、下划线、汉字以为的字符形如 +,-,*
(2)\S 匹配除空格以外的任意字符形如:1,* ,)
(3)[^abcde]匹配除abcde以为的其他字符 如 e,f,g,h
2.3-4 限定字符
限定字符:限定字符多用于重复匹配次数
限定字符 | 含义 |
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
详解和示例:
(1)\d* 匹配重复0次或多次数字 例如:可能为空 或 任意数字 (2,3。。。。)
(2)\d+ 匹配重复1次或多次数字 例如:可能为1个或多个数字 1,23,234,2345,........
(3)\d? 匹配重复次个或者一次数字 例如:可能为空或者任意的一个数字(1,2,。。。)
(4)\d{8}匹配重复8次数字 例如:123456768
(5)\d{4,}匹配重复至少4次数字 例如:1234,12345,124244,。。。。。
(6)^\d{8,11}$ 匹配重复8-11次数字 例如:12345678,123456789,1234567890,12345678901
2.3-5 不同创建方式使用的转义字符不同
1.字面量创建下元字符的转义用反斜杠\
//匹配第一个bat或cat,忽略大小写(上面的例子)
let reg2=/[bc]at/i;
//匹配第一个“[bc]at”,忽略大小写
let reg2=/\[bc\]at/i;
2. 构造函数创建下元字符的转义用两个反斜杠\\(二次转义)
//匹配第一个bat或cat,忽略大小写(上面的例子)
let reg2=new RegExp("[bc]at","i");
//匹配第一个“[bc]at”,忽略大小写
let reg2=new RegExp("\\[bc\\]at","i")
2.3-6 字符分支
字符分枝:多用于满足不同情况的选择,用“|”将不同的条件分割开来,比如有些固定电话区号有三位,有些有四位,这个时候可以采用字符分枝
例如:\d{3}-\d{8}|\d{4}-\d{8} 可以匹配两种不同长度区号的固定电话
正则表达式的知识点还有很多,我们只需要了解一些上面常用到的即可
2.4 正则表达式如何使用
2.4-1 test(str)方法
语法:reg.test(str)
test()方法用于判断字符串中是否满足正则表达式的内容,满足返回true,否则返回false
let abc="abcdDef";
let reg1=/d/ig;
console.log(reg1.test(abc));//true
2.4-2 exec(str)方法
语法:reg.exec(str)
exec()方法主要用于配合捕获组使用,如果找到匹配项,则返回包含第一个匹配信息的数组,其中包含两
个额外的属性,index是字符串中匹配模式的起始位置,input为要查找的字符串;否则返回null
let abc="abcdDefF";
let reg1=/f/g;
console.log(reg1.exec(abc));
返回的结果:['f', index: 6, input: 'abcdDefF', groups: undefined]
此外还有一些字符串方法频繁用于正则对象
2.4-3 match(reg)方法
语法:str.match(reg)
match()用于查找字符串中满足正则格式的内容并以数组的形式返回
let str="abcdDefF";
let reg1=/f/gi;
console.log(str.match(reg1));
返回结果:
(2) ['f', 'F']
2.4-4 replace(str)方法
语法:str.replace(reg)
replace()方法用于根据正则表达式或字符串查找相关内容并进行替换返回,替换后的字符串不影响原始字符串。
let str="abcdDefF";
let reg1=/f/gi;
let newstr=str.replace(reg1,"$"); //将f替换成$
console.log(newstr); //abcdDe$$
2.5 扩展
2.5-1 RegExp实例属性
每个RegExp实例都有下列属性,用于查询正则对象的各方面信息
属性 | 含义 |
global | 表示是否设置g标记,设置了返回true,否则返回false |
ignoreCase | 表示是否设置i标记,设置了返回true,否则返回false |
unicode | 表示是否设置u标记,设置了返回true,否则返回false |
sticky | 表示是否设置y标记,设置了返回true,否则返回false |
lastIndex | 表示在元字符下一次搜索的开始位置,始终从0开始,只有正则对象设置全局匹配 g ,该属性才起作用 |
multiline | 表示是否设置m标记,设置了返回true,否则返回false |
dotAll | 表示是否设置s标记,设置了返回true,否则返回false |
source | 正则对象的字面量字符串 |
flags | 正则对象的修饰符 |
我们来看一下实例:
let reg=/d/i;
console.log(reg.global); //false
console.log(reg.ignoreCase); //true
console.log(reg.multiline); //false
console.log(reg.lastIndex); //0
console.log(reg.source); //d
console.log(reg.flags); //i
2.5-2 RegExp构造函数属性
RegExp本身也有几个属性,用于查询正则表达式与字符串匹配后的信息
全名 | 简写 | 含义 |
input | $_ | 原始字符串 |
lastMatch | $& | 匹配到的结果 |
lastParen | $+ | 最后匹配的捕获组 |
leftContext | $` | 原始字符串中匹配项左边(前面)的文本 |
rightContext | $' | 原始字符串中匹配项右边(后面)的文本 |
我们来看一下实例:
let str="abcidef";
let reg=/(.)d/ig;
if(reg.test(str)){
console.log(reg.input); //abcidef
console.log(reg.leftContext); //abc
console.log(reg.rightContext); //ef
console.log(reg.lastMatch); //id
console.log(reg.lastParen); //i
}
RegExp还有其他几个构造函数属性,可以存储9个捕获组的匹配项,这些属性通过RegExp.$1~RegExp.$9来访问(这里给大家补充一个小知识:多个匹配项要用()括起来)
let str="this has been a short summer";
let reg=/(..)or(.)/g;
if(reg.test(str)){
console.log(reg.$1);//sh
console.log(reg.$2);//t
}
扩展部分大家了解一下即可,毕竟实际代码中用到的少之又少,只是在测试环节会用到,学不会也没有关系