JavaScript--内置对象--时间和正则表达式

本文详细介绍了JavaScript中的Date对象,包括其构造函数的使用、获取和设置时间信息、字符串转换、时间运算以及正则表达式的基础知识,包括量词、贪婪匹配和非贪婪匹配的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间

与Object,Number等一样,时间也有官方提供的构造函数Date

    var dt = new Date()
    console.log(dt)

通过构造函数获取的时间是调用函数时的时间点,时间点的所有信息封装到对象中了,我们可以通过一些方法获取时间点的信息

    console.log(dt.getFullYear())//获取完整的年份
    console.log(dt.getYear())//获取年份,如2023年返回123,1为特殊值,23为年份
    console.log(dt.getMonth())//获取月份 范围:0-11
    console.log(dt.getDate())//获取日期
    console.log(dt.getHours())//获取小时 范围:0-23
    console.log(dt.getMinutes())//获取分钟 范围:0-59
    console.log(dt.getSeconds())//获取秒 范围:0-59
    console.log(dt.getMilliseconds())//获取毫秒 范围:0-999
    console.log(dt.getTime())//1970-01-01 08:00:00-000 到现在过去了多少毫秒
    //UTC为 1970-01-01 00:00:00-000(与时区有关)
    console.log(dt.getDay())//获取星期 范围:1234560
    console.log(dt.getUTCHours())//获取UTC现在的小时,其余方法同理

 设置时间信息

在用Date构造函数创建时间对象时,我们是能够传入参数的,通过参数,我们能够定义传入的时间点

// var dt = new Date(参数)

传入的参数可以是一个,也可以是多个

只传入一个参数时

    //填时间格式字符串
    var dt = new Date("2023-07-15")
    console.log(dt)// 2023-07-15  08:00:00-000

    // var dt = new Date("2023-07-15 17:23:15")
    // console.log(dt)

    // var dt = new Date("Sat Jul 15 2025 17:23:15 GMT+0800 (中国标准时间)")
    // console.log(dt.getFullYear())

    // var dt = new Date("Mon Aug 07 09:23:08 +0800 2023")
    // console.log(dt)

    //填数字(毫秒)
    // var dt = new Date(25000)//距离世界校准时间25000毫秒
    // console.log(dt)

多个参数时

    //填数字
    var dt = new Date(1999, 2, 3)//1999-02-03  00:00:00-000
    console.log(dt)

    // var dt = new Date(1999, 2, 3, 14, 23, 58)//1999-02-03  14:23:48-000
    // console.log(dt)


    // var dt = new Date(1999, 2, 40, 27, 23, 58)
    // console.log(dt)

时间转化字符串

时间也有转字符串的方法

    //时间转化字符串
    var dt = new Date()
    console.log(dt.toString())
    // console.log(dt.toLocaleString())
    // console.log(dt.toLocaleDateString())
    // console.log(dt.toLocaleTimeString())
    // console.log(`${dt.getFullYear()}-${dt.getMonth()}-${dt.getDate()}`)

 时间的运算

时间是能够进行计算的

    //时间的运算
    var dt1 = new Date()
    var dt2 = new Date("2023-08-16 17:45:00")
    var re = dt1 - dt2  //得到两个时间的差值(毫秒)
    console.log(re)

修改时间信息

时间也有自己的静态方法

console.log(Date.now())

其等同于

console.log(new Date().getTime())

当然,我们更关心的应该是如何修改时间信息

    //修改一个时间点对象的信息
    var dt = new Date()
    dt.setMinutes(23)
    console.log(dt)

上图中的方法能修改分钟,修改月份,日期等都是使用set方法

正则表达式

正则表达式又称规则表达式,专门来操作字符串

字符串的格式

    //'{"name":"karen","age":123}'  JSON
    //'email=123&pwd=123&page=1'  querystring
    //'<h1>6666</h1>'  HTML模版字符串(template)

上图展示了部分

创建方法

两种创建方式:

1、直接量

其本身是一个对象,表达的意义是一种规则

//在两个斜杠中间写规则
var  reg=/abc/;
var  str="abcd";
reg.test(str)  ;	//检查在字符串str中有没有符合reg规则得字符

 2、构造方法RegExp()

使用new操作符,可以将已经存在的正则表达式用来给函数RegExp()传参,构造新的正则表达式

var reg=new RegExp("abc");
var str="abcd";
reg.test(str);

属性

正则表达式的属性(也称修饰符),可以在全局搜索中不区分大小写:

i ---》(ignoreCase )执行匹配时忽略大小写

g---》(global)执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)

m---》(multiline)执行多行匹配

var  reg=/abce/i
var  str="ABCEd"
reg.test(str)
var reg=new RegExp("abc","im")
var str="abcd"

字符串的match方法

var reg=/ab/;
var str="ababababab";
str.match(reg);//["ab"],只查找到第一个匹配值便返回
reg=/ab/g;
str.match(reg);//全局查找,把所有匹配值均返回

 方括号

使用方括号用于查找某个范围内的字符 ,一个中括号代表一位,中括号里边的内容代表的是这一位可以取值的范围

    var reg=/[ab][cd][d]/g;
	var str="abcd";
	str.match(reg);
    var reg=/[0-9A-Za-z][cd][d]/g;
	var str="ab1cd";
	str.match(reg);

插入符^放到[]里边表示"非"的意思

    var reg=/[^a][^b]/g;
	var str="ab1cd";
	str.match(reg)

括号里可以加入"|"表示"或"的意思,"|"操作符两边放匹配规则

var reg=/(abc|bcd)/g

匹配规则可以任意组合

元字符

元字符是拥有特殊含义的字符,元字符也可以组合放进中括号里去使用,一个元字符代表一位

元字符描述
\w --word查找单词字符(字母+数字+下划线)
\W查找非单词字符==[^\w]
\d --data查找数字
\D查找非数字字符
\s --space查找空白字符
\S查找非空白字符
\b --border匹配单词边界 "today is friday"
\B匹配非单词边界
\t查找制表符
\n查找换行符
\f查找换页符
\v查找垂直制表符
\uXXXX查找以十六进制规定的Unicode字符
. --必记(点号)查找单个字符,除了换行和行结束符
    var reg=/\wcd2/g;
	var str="bcd2";
	str.match(reg)

若要在正则表达式里匹配反斜杠\,直接写/\/是不行的,需要加上转义字符/\\/

元字符表内的内容不一一进行代码展示了

量词

量词,代表数量的词(下面表达式的n代表的是一个匹配规则,n后边符号的符号定义量词规则)

量词描述
n+匹配任何包含至少一个n的字符串
n*匹配任何包含零个或多个n的字符串
n?匹配任何包含零个或一个n的字符串
n{X}匹配包含X 个n 的序列的字符串/\w{10}/
n{X,Y}匹配任何包含X 个至Y 个n 的序列的字符串/\w{6,16}/
n{X,}匹配包含至少X 个n 的序列的字符串
n$匹配任何结尾为n 的字符串
^n匹配任何开头为n 的字符串
S(?=n)匹配任何其后紧接指定字符串n 的字符串S abc(?!d)
S(?!n)匹配任何其后没有紧接指定字符串n 的字符串S

n+ ----> {1,Infinity}个

n* ----> {0,Infinity}个

n? ---->(0,1)个

^n ----> 匹配以n 为开头的字符串nn$ ----> 匹配以n 为结尾的字符串n

?=n ----->n只参与条件限定,限定其后紧接指定字符串n 的字符串,但并不参与选择

?!n ----->n只参与条件限定,限定其后没有紧接指定字符串n 的字符串,但并不参与选择

    var str="aabaaaa";
	var reg=/aa(?=b)/g;//b只参与条件限定,并不参与选择
	str.match(reg);//["aa"],此时只有一个a 它的后面有紧跟字符b

	var str="aabaaaa";
	var reg=/aa(?!b)/g;
	str.match(reg);//[aa,aa],此时有4个a 它的后面没有紧跟字符b

方法

方法描述
search检索与正则表达式相匹配的值,返回匹配字符串的位置
match找到一个或多个正则表达式的匹配
replace替换与正则表达式匹配的字串
split把字符串分割为字符串数组

str.match(reg) ---->在规则中是否含有global 属性时的表现是不同的(与reg.exec(str)的微小区别

str.search(reg) ---->匹配后返回的是所匹配字符串的位置,匹配不到时返回-1

str.split(reg) ---->按照正则表达式拆分字符串

str.replace(reg,str1) ---->字符串替换;最实用的方法

reg=/(\w)\1(\w)\2/;//无global属性,反向索引
str="aabbgghh";
str.match(reg);//["aabb","a","b",index:0,input:"aabb"]

reg=/(\w)\1(\w)\2/g;//具有global属性
str="aabbgghh";
console.log(str.match(reg));//["aabb","gghh"]
reg=/(\w)\1(\w)\2/g;
str="edbaabbbbee";
str.search(reg);
str.search(reg);//3,与lastIndex无关,只返回第一个符合匹配规则的索引位置

reg=/(\w)\1(\w)\2/g;
str="abc";
str.search(reg);//-1
    var str="dai1akhd2gkhs";
	var reg=/\d/g;
	console.log(str.split(reg));//["dai","akhd","gkhs"],即将分隔符两侧的字符串进行拆分
	var str="aa";
	console.log(str.replace("a","b"))	//ba,只会替换匹配到的第一个

    var str="abcdedfa";
	var reg=/a/;
	str.replace(reg,"b");	//ba,跟上边一样没写"g"还是只替换一个

    var str="abcdedfa";
	var reg=/a/g;
	str.replace(reg,"b");

贪婪匹配与非贪婪匹配

贪婪匹配即照着"量词"规则中要求的更多个的情况去做匹配

	var str="aaaaa";
	var reg=/a+/g;
	str.match(reg);//["aaaaa"]

非贪婪匹配,在"量词"规则后边多加一个问号"?"

    var str="aaaaa";
	var reg=/a+?/g;
	str.match(reg);//["a","a","a","a","a"]

	var str="aaaaa";
	var reg=/a??/g;//第一个问号代表0~1个,第二个问号代表能取0就不取1去做匹配
	str.match(reg);//["","","","","",""]
    //实用:匹配用双大括号括起来的字符
	var l=/\{\{(.+)\}\}/g;
    var r=/\{\{(.+?)\}\}/g;
    var str=`{{name}}--{{msg}}`
    
    str.match(l);//["{{name}}--{{msg}}"]
	str.match(r);//["{{name}}", "{{msg}}"]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值