一:内置对象——时间
在 JavaScript 中,有一个内置的 Date
对象,用于处理日期和时间。
可以使用 new Date()
构造函数来创建一个 Date
对象,它会返回当前的日期和时间。
var currentDate = new Date();
var year = currentDate.getFullYear();
var month = currentDate.getMonth();
var day = currentDate.getDate();
var hours = currentDate.getHours();
var minutes = currentDate.getMinutes();
var seconds = currentDate.getSeconds();
console.log(year, month, day, hours, minutes, seconds); // 输出当前的年、月、日、小时、分钟、秒
我们使用 Date
对象的 getFullYear()
、getMonth()
、getDate()
、getHours()
、getMinutes()
和 getSeconds()
方法来获取当前的年、月、日、小时、分钟和秒,并将它们分别赋值给变量 year
、month
、day
、hours
、minutes
和 seconds
。然后,我们使用 console.log()
方法打印这些变量,它们会输出当前的年、月、日、小时、分钟和秒。
除了获取日期和时间的部分,Date
对象还提供了一些方法来设置日期和时间的各个部分,以及进行日期和时间的计算和比较。
练习:
发布时间:
var str = "Wed Aug 19 11:40:10 +0800 2023"
function sinaTime(str) {
var dt1 = new Date()
var dt2 = new Date(str)
var asbdt = dt1 - dt2
console.log(asbdt)
if (0 > asbdt) {
return "wrong"}
else if (0 <= asbdt && asbdt < 60 * 1000) {
return "刚刚"
}
else if (60 * 1000 <= asbdt && asbdt < 60 * 60 * 1000) {
var m = Math.floor(asbdt / 1000 / 60)
var m = new Date(asbdt).getMinutes()
}
else if (asbdt >= 60 * 60 * 1000) {
var mo = (dt2.getMonth() + 1 + "").padStart(2, "0")
var d = (dt2.getDate() + "").padStart(2, "0")
var h = dt2.getHours().toString().padStart(2, "0")
var mu = dt2.getMinutes().toString().padStart(2, "0")
var s = dt2.getSeconds().toString().padStart(2, "0")
return `${mo}-${d} ${h}:${mu}:${s}`
}
}
var re = sinaTime(str)
console.log(re)
//静态方法
console.log(Date.now())
console.log(new Date().getTime())
//修改一个时间点对象的信息
var dt = new Date()
dt.setMonth(4)
dt.setMinutes(24)
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()}`)
二:内置对象——正则表达式
正则表达式(Regular Expression)是一种用于匹配和操作字符串的强大工具。它是由字符和特殊字符组成的模式,用于描述字符串的特定模式。
在 JavaScript 中,可以使用内置的 RegExp
对象来创建和操作正则表达式。
下面是一些正则表达式的基本概念和语法:
-
字符匹配:正则表达式可以用来匹配特定的字符。例如,正则表达式
/hello/
可以匹配字符串中的 "hello"。 -
字符类:使用方括号
[]
来定义一个字符类,表示匹配其中的任意一个字符。例如,正则表达式/[aeiou]/
可以匹配任意一个元音字母。 -
元字符:正则表达式中的一些字符具有特殊的含义,称为元字符。例如,
.
表示匹配任意一个字符,*
表示匹配前面的字符零次或多次。 -
量词:使用量词来指定匹配的次数。例如,
*
表示匹配零次或多次,+
表示匹配一次或多次,?
表示匹配零次或一次。 -
边界匹配:使用
^
表示匹配字符串的开头,$
表示匹配字符串的结尾。 -
模式修饰符:在正则表达式的末尾可以添加修饰符来改变匹配的行为。例如,
i
表示不区分大小写,g
表示全局匹配。
创建方法
两种创建方式:
1、直接量
其本身是一个对象,表达的意义是一种规则。
(1)在两个斜杠中间写规则。
var reg=/abc/;
var str="abcd";
reg.test(str) ; //,检查在字符串str中有没有符合reg规则得字符
(2)在正则表达式得双斜杠后边还可以加字母i、g、m,表达其属性。
//i===》ignorcase,忽略大小写
//eg:
var reg=/abce/i;
var str="ABCEd";
reg.test(str) ;
2、构造方法RegExp()
//使用new操作符,new RegExp();
//eg:
var reg=new RegExp("abc");
var str="abcd";
reg.test(str);
//在new RegExp("abc")函数里边也可以添加属性i、g、m
//eg:
var reg=new RegExp("abc","im");
var str="abcd";
使用new操作符,可以将已经存在的正则表达式用来给函数RegExp()传参,构造新的正则表达式。
//reg与reg1值相同,但两个两个值相互独立,即reg!=reg1
//eg:
var reg=/abce/m;
var reg1=new RegExp(reg);
若去除new操作符,将已经存在的正则表达式用来给函数RegExp()传参,只是传递引用,不能构建新的正则表达式,极少的用法。
三个属性i,g,m
正则表达式的属性(也称修饰符),可以在全局搜索中不区分大小写
i ---》(ignoreCase )执行匹配时忽略大小写
g---》(global)执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
m---》(multiline)执行多行匹配
//使用字符串的match方法
//eg:
var reg=/ab/;
var str="ababababab";
str.match(reg);//["ab"],只查找到第一个匹配值便返回
reg=/ab/g;
str.match(reg);//["ab","ab","ab","ab","ab"],全局查找,把所有匹配值均返回
方括号
方括号用于查找某个范围内的字符:
一个中括号代表一位,中括号里边的内容代表的是这一位可以取值的范围
//eg1:
var reg=/[1234567890][1234567890][1234567890]/g;
var str="12309u98723zpoixcuypiouqwer";
str.match(reg);
//eg2:
var reg=/[ab][cd][d]/g;
var str="abcd";
str.match(reg);
//eg3:
var reg=/[0-9A-Za-z][cd][d]/g;//相当于var reg=/[0-9A-z][cd][d]/g
var str="ab1cd";
str.match(reg);
在括号里可以加入"|"表示"或"的意思,"|"操作符两边放匹配规则
//eg:
var reg=/(abc|bcd)/g;
var str="abc";
str.match(reg);//["abc"];//该规则既能匹配出字符串"abc"
str="bcd";
str.match(reg);//["bcd"];//该规则又能匹配出字符串"bcd"
reg=/(abc|bcd)[0-9]/g; //匹配规则可以任意组合
str="bcd2";
str.match(reg);
元字符
元字符是拥有特殊含义的字符,元字符也可以组合放进中括号里去使用,一个元字符代表一位(\d|\D)
元字符 | 描述 |
---|---|
\w --word | 查找单词字符(字母+数字+下划线) |
\W | 查找非单词字符==[^\w] |
\d --data | 查找数字 |
\D | 查找非数字字符 |
\s --space | 查找空白字符 |
\S | 查找非空白字符 |
\b --border | 匹配单词边界 "today is friday" |
\B | 匹配非单词边界 |
\t | 查找制表符 |
\n | 查找换行符 |
\f | 查找换页符 |
\v | 查找垂直制表符 |
\uXXXX | 查找以十六进制规定的Unicode字符 |
. --必记 | (点号)查找单个字符,除了换行和行结束符 |
量词
量词,代表数量的词(下面表达式的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 |
正则对象方法
方法 | 描述 |
---|---|
exec | 寻找字符串中是否含有检测的字符。返回:将找到的字符按数组返回。(execute) |
test | 检测字符串中是否含有检测的字符。返回:boolean。 |
正则实例属性
1、ignoreCase 是否设置了i
2、global 是否设置了g
3、multiline 是否设置了m
4、source 字面量形式对应的字符串
5、lastIndex 开始搜索下一个匹配项的字符位置,默认0
支持正则表达式的String对象的方法
方法 | 描述 |
---|---|
search | 检索与正则表达式相匹配的值,返回匹配字符串的位置 |
match | 找到一个或多个正则表达式的匹配 |
replace | 替换与正则表达式匹配的字串 |
split | 把字符串分割为字符串数组 |
贪婪匹配与非贪婪匹配
-
是否带有小数
var objRegExp= /^\d+\.\d+$/;
-
校验是否中文名称组成
var reg=/^[\u4E00-\u9FA5]{2,4}$/;
-
校验是否全由8位数字组成
var reg=/^[0-9]{8}$/;
-
校验电话码格式
var reg= /^((0\d{2,3}-\d{7,8})|(1[35847]\d{9}))$/;
-
校验邮件地址是否合法
9391493618639@qq.com var reg=/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
练习:
//练习一:写一个正则表达式,检验字符串首尾是否含有数字。
const regex = /^[0-9](\w|\W)*[0-9]$/;
const inputContent = "123AAF321a"; // 待匹配的字符串
const result = regex.test(inputContent);
console.log(result); // 输出结果为 true 或 false
//练习二:写一个正则表达式,检验字符串首尾是否含都有数字。
function checkDigits(str) {
var pattern = /^\d.*\d$/;
return pattern.test(str);
}
console.log(checkDigits('123abc456')); // 输出 true
console.log(checkDigits('abc123')); // 输出 false
console.log(checkDigits('abc123def')); // 输出 false
console.log(checkDigits('123')); // 输出 true
var obj = {}
var re = /\d/i
re.test()
re.exec()
console.log(re.ignoreCase, re.global, re.multiline, re.source)
var reg2 = new RegExp(re.source)
输出结果:true false false '\\d'
var reg=/ab/;
var str="abababab";
console.log(reg.lastIndex);//0
console.log(reg.exec(str));//["ab",index:0,input:"abababab"]
console.log(reg.lastIndex);//0
console.log(reg.exec(str));//["ab",index:0,input:"abababab"]
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"]