一、 定义正则表达式的方法
ECMAScript通过RegExp类型来支持正则表达式。
1、字面量的形式
语法:
var expression = / pattern / flags;
其中pattern部分可以是任何简单或复杂的正则表达式,可以包含字符类,限定符、分组、向前查找以及反向引用。
每个正则表达式都可以带有一个或多个标志(flags),用以标明正则表达式的行为。正则表达式的匹配模式支持下列三个标志:
- g:表示全局模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止。
- i:表示不区分大小写模式,即在确定匹配项时忽略模式于字符串的大小写。
- m:表示多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。
2、使用RegExp构造函数
RegExp构造函数接收两个参数:一个是要匹配的字符串模式,另一个是可选的标志字符串。例如:
var pattern1 = /[bc]at/i;
等价于
var pattern2 = new RegExp("[bc]at", “i”);
注:ECMAScript 5明确规定,使用正则表达式字面量必须像直接调用 RegExp 构造函数一样,每次都创建新的 RegExp实例。
二、RegExp实例属性
- global:布尔值,表示是否设置了 g 标志。
- ignoreCase:布尔值,表示是否设置了 i 标志。
- lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从 0算起。
- multiline:布尔值,表示是否设置了 m 标志。
- source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。
三、 RegExp实例方法
1、exec()
RegExp 对象的主要方法是 exec(),该方法是专门为捕获组而设计的。
exec()接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回 null。
返回的数组虽然是 Array 的实例,但包含两个额外的属性:index 和 input。其中,index 表示匹配项在字符串中的位置,而 input 表示应用正则表达式的字符串。
在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)。
对于 exec()方法而言,即使在模式中设置了全局标志(g),它每次也只会返回一个匹配项。
在不设置全局标志的情况下,在同一个字符串上多次调用 exec()将始终返回第一个匹配项的信息。
而在设置全局标志的情况下,每次调用 exec()则都会在字符串中继续查找新匹配项。
2、test()
正则表达式的第二个方法是 test(),它接受一个字符串参数。在模式与该参数匹配的情况下返回 true;否则,返回 false。
在只想知道目标字符串与某个模式是否匹配,但不需要知道其文本内容的情况下,使用这个方法非常方便。因此,test()方法经常被用在 if 语句中。
3、 toLocaleString()和 toString()方法
RegExp 实例继承的 toLocaleString()和 toString()方法都会返回正则表达式的字面量。