JS基本引用类型-Date对象与正则表达式(RegExp)

目录

1.Date类型

  1.1 如何创建date类型

  1.2 Date类型常用方法

    1.2-1 Date.parse()

   1.2-2 Date.UTC() 

   1.2-3 Date.now()

    1.2-4 日期格式化方法

   1.2-5其余方法

2.RegExp

2.1创建正则表达式

    2.1-1.字面量创建(推荐)

    2.1-2.构造函数创建

    2.1-3 使用已有的正则表达式创建,并可以选择性修改他们的修饰符

2.2正则表达式修饰符

2.3元字符

  2.3-1常见的元字符

 2.3-2 常用的元字符 

2.3-3 常用的反义字符 

2.3-4 限定字符 

  2.3-5 不同创建方式使用的转义字符不同

2.3-6 字符分支 

2.4 正则表达式如何使用

 2.4-1 test(str)方法

 2.4-2 exec(str)方法 

2.4-3 match(reg)方法

 2.4-4 replace(str)方法

 2.5 扩展

  2.5-1 RegExp实例属性

2.5-2 RegExp构造函数属性


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其余方法

 451027cf669f43928c398a380650b2c9.png

 这里面给大家总结以后最常用的三种获取时间分量的方法

  • 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
}

扩展部分大家了解一下即可,毕竟实际代码中用到的少之又少,只是在测试环节会用到,学不会也没有关系

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值