10-JavaScript高级程序设计-RegExp

一、RegExp类型

1.创建正则表达式
方式1:字面量形式

var expression = / pattern / flags ;

参数:

  • 模式(pattern)部分可以是任何简单或复杂的正则表达式,可以包含字符类、限定符、分组、 向前查找以及反向引用。
    模式中元字符必须转义。
    正则表达式中的元字符包括: ( [ { \ ^ $ | ) ? * + . ] }
  • 每个正则表达式都可带有一或多个标志(flags),用以标明正则表达式的行为。
    g: 表示全局(global)模式
    i: 表示不区分大小写(case-insensitive)模式
    m: 表示多行(multiline)模式
方式2:构造函数

var pattern = new RegExp("[bc]at", "i");
参数: 要匹配的字符串模式,可选的标志字符串。
注意:两个参数都是字符串(不能传正则表达式字面量)。某些情况下要对字符串模式进行双重转义

注意:
ECMAScript 3 中, 正则表达式字面量始终会共享同一个RegExp实例,而使用构造函数创建的每一个新RegExp实例都是一个新实例。
ECMAScript 5 明确规定,使用正则表达式字面量必须像直接调用 RegExp 构造函数一样,每次都创建新的 RegExp 实例。IE9+、Firefox 4+和 Chrome 都据此做出了修改。

2.RegExp实例属性

 global: 布尔值,表示是否设置了 g 标志。
 ignoreCase: 布尔值,表示是否设置了 i 标志。
 lastIndex: 整数,表示开始搜索下一个匹配项的字符位置,从 0 算起。
 multiline: 布尔值,表示是否设置了 m 标志。
 source: 正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。
没有多大用处,因为这些信息全都包含在模式声明中。

3.RegExp实例方法
(1)正则.exec(字符串参数)

专门用于捕获组。用()表示捕获组。
返回包含第一个匹配项信息的数组;没有匹配项返回 null。
返回数组包含两个额外的属性: index 和 input。index 表示匹配项在字符串中的位置,input 表示应用正则表达式的字符串。
在数组中,第一项是与整个模式匹配的字符串(第一个匹配项),其他项是与模式中的捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)。

即使在模式中设置了全局标志(g),每次也只会返回一个匹配项。
不设置全局标志的情况下,在同一个字符串上多次调用 exec() 将始终返回第一个匹配项的信息。
设置全局标志的情况下,每次调用 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
(2)正则.test(字符串参数)

检测目标字符串与某个模式是否匹配。
匹配返回 true; 不匹配返回 false。

(3)toLocaleString() toString() valueOf()

RegExp 实例继承的 toLocaleString()和 toString()方法都会返回正则表达式的字面量,与创建正则表达式的方式无关。
正则表达式的 valueOf()方法返回正则表达式本身。

4.RegExp构造函数属性

RegExp 构造函数包含一些属性:
input $_ 最近一次要匹配的字符串。Opera不支持
lastMatch $& 最近一次的匹配项。Opera不支持
lastParen $+ 最近一次匹配的捕获组。Opera不支持
leftContext $` input字符串中lastMatch之前的文本
multiline $* 布尔值,表示是否所有表达式都使用多行模式。IE和Opera不支持
rightContext $’ Input字符串中lastMatch之后的文本
长属性名和短属性名

9 个用于存储捕获组的构造函数属性:
RegExp.$1、RegExp.$2…RegExp.$9,分别用于存储第一、第二…第九个匹配的捕获组。
在 调用 exec() 或 test() 方法时,这些属性会被自动填充。

5.模式的局限性


上一篇:9-JavaScript高级程序设计-Date
下一篇:11-JavaScript高级程序设计-Function

全书整理版:《Javascript高级程序设计》第3版(总结版)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值