《JavaScript高级程序设计》(第4版)阅读笔记(二十五)

这篇文章继续分享《高程四》第五章的内容。有需要的同学可以跟着看呀。

 

5.1.2 日期格式化方法
 

Date 类型有几个专门用于格式化日期的方法,它们都会返回字符串:

toDateString() 显示日期中的周几、月、日、年(格式特定于实现)(以浏览器实际的实现为主);
toTimeString() 显示日期中的时、分、秒和时区(格式特定于实现);
toLocaleDateString() 显示日期中的周几、月、日、年(格式特定于实现和地区);
toLocaleTimeString() 显示日期中的时、分、秒(格式特定于实现);
toUTCString() 显示完整的UTC日期(格式特定于实现)。

这些方法的输出与 toLocaleString() 和 toString() 一样,会因浏览器而异。因此不能用于在用户界面上一致地显示日期。

注意 还有一个方法叫 toGMTString() ,这个方法跟toUTCString() 是一样的,目的是为了向后兼容。不过,规范建议新代码使用 toUTCString() 。

 

5.1.3 日期/时间组件方法
 

Date 类型剩下的方法(见下表)直接涉及取得或设置日期值的特定部分。注意表中“UTC日期”,指的是没有时区偏移(将日期转换为GMT)时的日期。

方法说明
getTime()返回日期的毫秒表示;与valueOf() 相同
setTime(milliseconds)设置日期的毫秒表示,从而修改整个日期
getFullYear()返回4位数年(即2019而不是19)
getUTCFullYear()返回UTC日期的4位数年
setFullYear(year)设置日期的年( year 必须是4位数)
setUTCFullYear(year)设置UTC日期的年( year 必须是4位数)
getMonth()返回日期的月(0表示1月,11表示12月)
getUTCMonth()返回UTC日期的月(0表示1月,11表示12月)
 
方法说明
setMonth(month)设置日期的月( month 为大于等于0的数值,大于11加年)
setUTCMonth(month)设置UTC日期的月( month 为大于等于0的数值,大于11加年)
getDate()返回日期中的日(1~31)
getUTCDate()返回UTC日期中的日(1~31)
setDate(date)设置日期中的日(如果 date 大于该月天数,则加月)
setUTCDate(date)设置UTC日期中的日(如果date 大于该月天数,则加月)
getDay()返回日期中表示周几的数值(0表示周日,6表示周六)
 
方法说明
getUTCDay()返回UTC日期中表示周几的数值(0表示周日,6表示周六)
getHours()返回日期中的时(0~23)
getUTCHours()返回UTC日期中的时(0~23)
setHours(hours)设置日期中的时(如果 hours大于23,则加日)
setUTCHours(hours)设置UTC日期中的时(如果hours 大于23,则加日)
getMinutes()返回日期中的分(0~59)
getUTCMinutes()返回UTC日期中的分(0~59)
setMinutes(minutes)设置日期中的分(如果minutes 大于59,则加时)
setUTCMinutes(minutes)设置UTC日期中的分(如果minutes 大于59,则加时)
 
方法说明
getSeconds()返回日期中的秒(0~59)
getUTCSeconds()返回UTC日期中的秒(0~59)
setSeconds(seconds)设置日期中的秒(如果seconds 大于59,则加分)
setUTCSeconds(seconds)设置UTC日期中的秒(如果seconds 大于59,则加分)
getMilliseconds()返回日期中的毫秒
getUTCMilliseconds()返回UTC日期中的毫秒
setMilliseconds(milliseconds)设置日期中的毫秒
setUTCMilliseconds(milliseconds)设置UTC日期中的毫秒
getTimezoneOffset()返回以分钟计的UTC与本地时区的偏移量(如美国EST即“东部标准时间”返回300,进入夏令时的地区可能有所差异)

 

5.2 RegExp

 

ECMAScript通过 RegExp 类型支持正则表达式。正则表达式使用类似Perl的简洁语法来创建:

let expression = /pattern/flags;

这个正则表达式的 pattern (模式)可以是任何简单或复杂的正则表达式,包括字符类、限定符、分组、向前查找和反向引用。每个正则表达式可以带零个或多个 flags (标记),用于控制正则表达式的行为。下面给出了表示匹配模式的标记。

g :全局模式,表示查找字符串的全部内容,而不是找到第一个匹配的内容就结束。
i :不区分大小写,表示在查找匹配时忽略 pattern 和字符串的大小写。
m :多行模式,表示查找到一行文本末尾时会继续查找。
y :粘附模式,表示只查找从 lastIndex 开始及之后的字符串。
u :Unicode模式,启用Unicode匹配。
s : dotAll 模式,表示元字符 . 匹配任何字符(包括 \n 或\r )。

 使用不同模式和标记可以创建出各种正则表达式,比如:

// 匹配字符串中的所有"at"
let pattern1 = /at/g;
// 匹配第一个"bat"或"cat",忽略大小写
let pattern2 = /[bc]at/i;
// 匹配所有以"at"结尾的三字符组合,忽略大小写
let pattern3 = /.at/gi;

与其他语言中的正则表达式类似,所有元字符在模式中也必须转义,包括:

( [ { \ ^ $ | ) ] } ? * + .

元字符在正则表达式中都有一种或多种特殊功能,所以要匹配上面这些字符本身,就必须使用反斜杠来转义。下面是几个例子:

// 匹配第一个"bat"或"cat",忽略大小写
let pattern1 = /[bc]at/i;
// 匹配第一个"[bc]at",忽略大小写
let pattern2 = /\[bc\]at/i;
// 匹配所有以"at"结尾的三字符组合,忽略大小写
let pattern3 = /.at/gi;
// 匹配所有".at",忽略大小写
let pattern4 = /\.at/gi;

这里的 pattern1 匹配 "bat" 或 "cat" ,不区分大小写([]不转译的时候表示“分组”,也就是匹配b或c)。要直接匹配 "[bc]at" ,左右中括号都必须像 pattern2 中那样使用反斜杠转义。在 pattern3 中,点号表示 "at" 前面的任意字符都可以匹配。如果想匹配 ".at" ,那么要像 pattern4 中那样对点号进行转义。

前面例子中的正则表达式都是使用字面量形式定义的。正则表达式也可以使用 RegExp 构造函数来创建,它接收两个参数:模式字符串和(可选的)标记字符串。任何使用字面量定义的正则表达式也可以通过构造函数来创建,比如:

// 匹配第一个"bat"或"cat",忽略大小写
let pattern1 = /[bc]at/i;
// 跟pattern1一样,只不过是用构造函数创建的
let pattern2 = new RegExp("[bc]at", "i");

这里的 pattern1 和 pattern2 是等效的正则表达式。注意,RegExp 构造函数的两个参数都是字符串。因为 RegExp 的模式参数是字符串,所以在某些情况下需要二次转义。所有元字符都必须二次转义,包括转义字符序列,如 \n ( \ 转义后的字符串是 \\ ,在正则表达式字符串中则要写成 \\\\ )。下表展示了几个正则表达式的字面量形式,以及使用 RegExp 构造函数创建时对应的模式字符串。 

字面量模式对应的字符串
/\[bc\]at/"\\[bc\\]at"
/\.at/"\\.at"
/name\/age/"name\\/age"
/\d.\d{1,2}/"\\d.\\d{1,2}"
/\w\\hello\\123/"\\w\\\\hello\\\\123"

此外,使用 RegExp 也可以基于已有的正则表达式实例,并可选择性地修改它们的标记:(也就是说,RegExp的参数除了字符串形式的模式和标记外,还可以是正则表达式实例)

const re1 = /cat/g;
console.log(re1); // "/cat/g"
const re2 = new RegExp(re1);
console.log(re2); // "/cat/g"
const re3 = new RegExp(re1, "i");
console.log(re3); // "/cat/i"


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值