引用类型(Date 和 RegExp)
- Date 类型
js 中的 Date 类型是在早期 java 中的 java.util.Date 的基础构建的,Date 以 1970年1月1日0时到现在的毫秒数来记录日期的。
Date 创建实例方式:
var date = new Date()
如果不传参数,则获取当前日期和时间。
如果要根据特定的日期来获取日期对象,需要传入该日期的毫秒数,为简化操作,js 提供两个方法:
- Date.parse()
接收一个表示日期的字符串,但没有明确指定支持哪种格式,通常因为地区而异。常用格式有:
// 1. 月/日/年,如 11/13/2016
var date = new Date(Date.parse("11/13/2016"));
// 2. 英文月名 日,年,如 May 11,2016
var date = new Date(Date.parse("May 11,2016"));
- Date.UTC()
它的参数分别是年份、基于0的月份(1月就是0,2月就是1,以此类推)、天、时、分、秒、毫秒,其中只有前面两个参数是必须的,如:
var date = new Date(Date.UTC(2016, 11)); // 2016年12月1日零时0分
其中 js 中添加 Date.new() 来获取当前时间的毫秒数
- RegExp 类型
js 中通过 RegExp 类型来支持正则表达式。
正则表达式的匹配模式支持下列3个标志:
- 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
注意:模式中使用的所有元字符都必须转义,正则表达式中的元字符包括:
( [ { \ ^ $ | ) ? * + . ] }
创建正则表达式
字面量:
var pattern1 = /[bc]at/i;
构造方法:
var pattern2 = new RegExp("[bc]at", "i");
这两种方式是等价的。
RegExp 实例属性
- global:布尔值,表示是否设置了g标志
- ignoreCase:布尔值,表示是否设置了i标志
- lastIndex:整数,表示开始搜索的下一个匹配项的字符位置,从0算起
- multiline:布尔值,表示是否设置了m标示
- source:正则表达的字符串表示
RegExp 实例方法
exec() 方法:
接受一个参数,应用模式的字符串,返回包含第一个匹配项的信息数组,具有额外的 index 和 input 属性,index 表示匹配项在字符串的位置,而 input 表示应用正则表达式的字符串。exec() 方法每次只会返回一个匹配项,如果设置 g 标志,就会继续往下找,不设置只会返回发现的第一个。
var text = "cat,bat,sat,fat";
var pattern1 = /.at/;
var matches = pattern1.exec(text);
matches.index; // 0
matches[0]; // cat
pattern1.lastIndex; // 0
var matches = pattern1.exec(text);
matches.index; // 0
matches[0]; // cat
pattern1.lastIndex; // 0
var pattern2 = /.at/g;
var matches = pattern2.exec(text);
matches.index; // 0
matches[0]; // cat
pattern2.lastIndex; // 3
var matches = pattern2.exec(text);
matches.index; // 4
matches[0]; // cat
pattern2.lastIndex; // 7
test() 方法:接受一个字符串参数,模式与该参数匹配返回 true 否则 返回 false
var text = "000-00-000";
var pattern = /\d{3}-\d{2}-\d{3}/;
if (pattern.test(text)) {
}
RegExp 构造函数属性(表态属性)
可以通过长属性名和短属性名两种方式访问。
- input $_ 最近一次匹配的字符串(Opera 未实现)
- lastMatch $& 最近一次匹配项(Opera 未实现)
- lastParen $+ 最近一次的匹配捕获组(Opera 未实现)
- leftContext $` input 字符串中 lastMatch 之前的文本
- multiline $* 布尔值,表示所有表达式都使用多行模式(IE 和 Opera 未实现)
- rightContext $' input 字符串中 lastMatch 之后的文本
模式的局限性
ECMAScript 正则表达式不支持的特性:
- 匹配字符串开始和结尾的 \A 和 \Z 锚 (但支持插入 ^ 和 $ 来匹配字符串的开始和结尾)
- 向后查找
- 并集与交集类
- 原子组
- Unicode支持
- 命名的捕获组
- s(single, 单行) 和 x(free-spacing, 无间隔)匹配模式
- 条件匹配
- 正则表达式注释
网友评论