js 学习 -- 04

引用类型(Date 和 RegExp)

  1. 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() 来获取当前时间的毫秒数

  1. 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, 无间隔)匹配模式
  • 条件匹配
  • 正则表达式注释

你可能感兴趣的:(js 学习 -- 04)