Js高程第五章第三四节 Date RegExp二次学习

1.Date

介绍: Date类型使用自 UTC(Coordinated Universal Time,国际协调时间)
1970 年 1 月 1 日午夜(零时)开始经过的毫秒数来保存日期在使用这种数据存储格式的条件下,Date 类型保存的日期能够精确到 1970 年 1 月 1 日之前或之后的 285 616 年

创建一个Date类型对象

let time = new Date()

不传递参数的情况下,新创建的对象自动获得当前日期和时间
1.Date.parse()
接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数
参数形式建议使用"月/日/年"

let time = new Date("1/1/2019")   //等于默认调用parse来自于构造函数的模仿 new Date(Date.parse("1/1/2019")
//Tue Jan 01 2019 00:00:00 GMT+0800 (中国标准时间)   chrome中结果

如果传入 Date.parse()方法的字符串不能表示日期,那么它会返回 Invalid Date

let wrongTime = new Date("xxasdjalk")     // Invalid Date

2.Date.UTC()
参数:(年 月 日 时 分 秒 毫秒) 年月必要 其余未设置则为0 月(0-11) 时(0-23)

    let Utime = new Date(Date.UTC(2019, 8))
    let UtimeAll = new Date(Date.UTC(2019, 8, 8, 10, 20, 30))  //Sun Sep 08 2019 18:20:30 GMT+0800 (中国标准时间)
    let UtimeAll2 = new Date(2019, 8, 8, 10, 20, 30)  //Sun Sep 08 2019 10:20:30 GMT+0800 (中国标准时间)

如同模仿 Date.parse()一样,Date 构造函数也会模仿 Date.UTC()
但有一点明显不同:日期和时间都基于本地时区而非 GMT 来创建
如果第一个参数是数值则为UTC 字符为parse

3.Date.now() 计时用 支持IE9以上 不支持则使用let start = +new Date()
ECMAScript 5 添加了 Data.now()方法,返回表示调用这个方法时的日期和时间的毫秒数

    let start = Date.now()
    //some function
    let end = Date.now()
    console.log(end - start)

4.日期/时间组件方法
一些较实用方法:

  • getTime() 返回表示日期的毫秒数;与valueOf()方法返回的值相同
  • setTime(毫秒) 以毫秒数设置日期,会改变整个日期
  • getFullYear() 取得4位数的年份
  • getMonth() 返回日期中的月份从0开始
  • getDate() 返回日期月份中的天数
  • getDay() 返回日期中星期的星期几
  • getHours() 返回日期中的小时数(0到23)
  • getMinutes() 返回日期中的分钟数(0到59)
  • getSeconds() 返回日期中的秒数(0到59)
  • …等等

2.RegExp

1.创建一个正则表达:
let expres = /pattern/flags
pattern : 任何简单或复杂的正则表达式
flags : 一或多个标志
g 全局(global)
i 不区分大小写(case-insensitive)
m 多行(multiline)

// 匹配字符串中所有"at"的实例
var pattern1 = /at/g
// 匹配第一个"bat"或"cat",不区分大小写
var pattern2 = /[bc]at/i
// 匹配所有以"at"结尾的 3 个字符的组合,不区分大小写
var pattern3 = /.at/gi

模式中使用的所有元字符都必须转义。正则表达式中的元字符包括:
( [ { \ ^ $ | ) ? * + .]}

//匹配第一个" [bc]at",不区分大小写
var pattern1 = /\[bc\]at/i
//匹配所有".at",不区分大小写
var pattern2 = /\.at/gi

关于RegExp构造函数

var re = null, 
 i; 
for (i=0; i < 10; i++){ 
 re = /cat/g; 
 re.test("catastrophe"); 
} 
for (i=0; i < 10; i++){ 
 re = new RegExp("cat", "g"); 
 re.test("catastrophe"); 
}

在第一个循环中,即使是循环体中指定的,但实际上只为/cat/创建了一个 RegExp 实例。由于实
例属性不会重置 因为第一次调用 test()找到了"cat",但第二次调用是从索引为 3 的字符(上一次匹配的末尾)开始的,
所以就找不到它了。由于会测试到字符串末尾,所以下一次再调用 test()就又从开头开始了。
第二个循环使用 RegExp 构造函数在每次循环中创建正则表达式。因为每次迭代都会创建一个新的
RegExp 实例,所以每次调用 test()都会返回 true。
ECMAScript 5 明确规定,使用正则表达式字面量必须像直接调用 RegExp 构造函数一样,每次都创建新的 RegExp 实例

2.RegExp实例属性

重点:通过这些属性可以获知一个正则表达式的各方面信息
但却没有多大用处,因为这些信息全都包含在模式声明中
RegExp 的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息。
global:布尔值,表示是否设置了 g 标志。
ignoreCase:布尔值,表示是否设置了 i 标志。
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从 0 算起。
multiline:布尔值,表示是否设置了 m 标志。
source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回

var pattern1 = /\[bc\]at/i; 
alert(pattern1.global); //false 
alert(pattern1.ignoreCase); //true 
alert(pattern1.multiline); //false 
alert(pattern1.lastIndex); //0 
alert(pattern1.source); //"\[bc\]at"

3.RegExp实例方法
1.exec()
RegExp 对象的主要方法是 exec() 接受一个参数为要使用模式的字符串
返回包含第一个匹配项的数组 但是包含两个非array属性:
index 表示匹配项在字符串中的位置
input 表示应用正则表达式的字符串

    var text = "mom and dad and baby";
    var pattern = /mom( and dad( and baby)?)?/gi;
    var matches = pattern.exec(text);
    alert(matches.index); // 0
    alert(matches.input); // "mom and dad and baby"
    alert(matches[0]); // "mom and dad and baby"
    alert(matches[1]); // " and dad and baby"
    alert(matches[2]); // " and baby"

对于 exec()方法,即使在模式中设置了全局标志(g),它每次也只会返回一个匹配项。
若不设g,则同一个字符串上多次调用 exec()将始终返回第一个匹配项的信息。
而在设置g的情况下,每次调用 exec()则都会在字符串中继续查找新匹配项

    var text = "cat, bat, sat, fat";
    
    var pattern1 = /.at/;
    var matches = pattern1.exec(text);
    alert(matches.index); //0
    alert(matches[0]); //cat
    alert(pattern1.lastIndex); //0

    matches = pattern1.exec(text);
    alert(matches.index); //0
    alert(matches[0]); //cat
    alert(pattern1.lastIndex); //0

    var pattern2 = /.at/g;
    var matches = pattern2.exec(text);
    alert(matches.index); //0
    alert(matches[0]); //cat
    alert(pattern2.lastIndex); //3

    matches = pattern2.exec(text);
    alert(matches.index); //5
    alert(matches[0]); //bat
    alert(pattern2.lastIndex); //8

IE 的 JavaScript 实现在 lastIndex 属性上存在偏差,即使在非全局模式下,lastIndex 属性每次也会变化

2.test()
它接受一个字符串参数 在模式与该参数匹配的情况下返回true否则 返回 false

    var text = "17699999999";
    var pattern = /\d{11}/;
    if (pattern.test(text)){
      alert("The phone was true.");
    }

4.RegExp一些构造函数属性
对opera不大友好

var text = "this has been a short summer"; 
var pattern = /(.)hort/g; 
/* 
 * 注意:Opera 不支持 input、lastMatch、lastParen 和 multiline 属性
 * Internet Explorer 不支持 multiline 属性
 */ 
if (pattern.test(text)){ 
 alert(RegExp.input); // this has been a short summer  最近一次要匹配的字符串
 alert(RegExp.leftContext); // this has been a  input字符串中lastMatch之前的文本
 alert(RegExp.rightContext); // summer  	Input字符串中lastMatch之后的文本
 alert(RegExp.lastMatch); // short  最近一次的匹配项
 alert(RegExp.lastParen); // s  最近一次匹配的捕获组
 alert(RegExp.multiline); // false  表示是否所有表达式都使用多行模式
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值