RegExp类型

RegExp类型

ECMScript是通过RegExp类型来支持正则表达式。

有两种创建正则表达式的方式:

(1)字面量形式:

var expression=/pattern/flags;

(2)使用RegExp构造函数:

var expression=new RegExp("pattern","flags");

其中,要特别注意的是在构造函数中的字符转义和字面量形式中的字符转义,稍后有提到。

pattern可以是任何简单或者复杂的正则表达式,可以包含字符类、限定符、分组、向前查找以及反向引用。flags用以标明正则表达式的行为,正则表达式的匹配模式支持下列三个标志:

  • g:表示全局模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止。
  • i:表示不区分大小模式,即在确定匹配项时忽略模式和字符串的大小写。
  • m:表示多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。
var pattern1=/at/g;    //匹配字符串中所有的at的实例
var parttern2=/[bc]at/i;    //匹配第一个“bat”或“cat”,不区分大小写
var parttern3=/.at/gi;    //匹配所有以“at”结尾的3个字符串的组合,不区分大小写 

模式中使用的所有元字符都必须转义。正则表达式中的元字符包括:([{\^$|)?*+.]}想要匹配这些符号,都必须转义,由于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实例都是一个新实例。看下面例子:

var re=null,
        i=;
for(i=0;i<10;i++){
        re=/cat/g;
        re.test("catastrophe");
}

for(i=0;i<10;i++){
        re=new RegExp("cat","g");
        re.test("catastrophe");
}

在第一个循环中,即使是循环体中指定的,但是实质上只为/cat/创建了一个RegExp实例。由于实例属性不会重置,所以在循环中再次调用test()方法会失败。这是因为第一次调用test()找到了“cat”但第二次调用是从索引为3的字符开始的,所以就找不到它了。由于会测试到字符串的末尾,所以下一次再次调用test()就又从开头开始了。

第二个循环使用了RegExp的构造函数在每次循环中创建实例,因为每次迭代都会创建一个新的RegExp实例,所以每次调用test()都会返回true。

RegExp实例属性

  • global:布尔值,表示是否设置了g标志;
  • ingoreCase:布尔值,表示是否设置了i标志;
  • multiline:布尔值,表示是否设置了m标志;
  • lastIndex:整数,表示开始搜索下一个匹配项的字符串位置,从0开始;
  • source:正则表达式的字符串表示,按字面量形式而非传入构造函数中的字符串模式返回。
var pattern1=/\[bc\]at/i;

alert(pattern1.global);    //false
alert(pattern1.ingnoreCase);    //true
alert(pattern1.lastIndex);    //0
alert(pattern1.multiline);    //false
alert(pattern1.source);        //"\[bc\]at"

RegExp实例方法

(1)exec()

接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null。返回的数组虽然是Array的实例,但包含两个额外的属性:inndex和input。其中,index表示匹配项在字符串中的位置,而input表示应用正则表达式的字符串。在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串。看下例:

var text="mom and dad and bady";
var pattern=/mom( and dad( and bady)?)?/gi;
var matches=pattern.exec(text);
alert(matches.index);    //0
alert(matches.input);    //"mom and dad and bady"
alert(matches[0]);    //"mom and dad and bady"
alert(matches[1]);    //" and dad and bady"
alert(matches[2]);    //" and bady"

对于exec()方法而言,即使设置了全局标志(g),他每次也只会返回一个匹配项。在不设置全局标志的情况下,在同一个字符串上多次调用exec()将始终返回第一个匹配项的信息。而在设置全局标志的情况下,每次调用exec()将都会在字符串查找新的匹配项。

(2)test()

接受一个字符串参数。在模式与字符串参数匹配的情况下返回true;否则,返回false。在只想知道目标字符串与某个模式是否匹配,而不需要知道其文本内容时,使用这个方法。

时间: 2024-12-20 12:13:44

RegExp类型的相关文章

RegExp类型,单体内置对象

1.RegExp类型:  1)什么是正则表达式:RegExp    --是一种规则,模式    --强大的字符串匹配工具    --创建:    --使用RegExp构造函数创建:var re=new RegExp('a','i');    --使用字面量创建:var re=/a/i;    //i--ignore表示忽略大小写 2)正则表达式里面的字符:    1)修饰符      --i:执行对大小写不敏感的匹配.      --g:执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)  

高程5.4 RegExp类型

ECMAScript通过RegExp类型来支持正则表达式. 使用下面类似Perl的语法,就可以创建一个正则表达式. var expression=/pattern/flags; 其中的模式(pattern)部分可以是任何简单的或复杂的正则表达式,可以包含字符类,限定符,分组,向前查找以及反向引用. 每个正则表达式都可带有一或多个标志(flags),用以标明正则表达式的行为. 正则表达式的匹配模式支持下面3个标志. g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配

引用类型-RegExp类型

JavaScript高级程序设计(第三版)笔记-第五章-RegExp类型 定义正则表达式有两种方式 1.用字面量形式定义正则表达式: ver expression = /patterns/flags; patterns:可以是任何简单或者复杂的正则表达式 flags: g:表示全局 i:表示不区分大小写 m:表示多行模式,在到达一行的末尾时还会继续查找下一行 var patterns1 = /at/g;//匹配字符中所有“at”的实例 var patterns2 = /[bc]at/i;//匹配

js中RegExp类型

ECMAScript通过RegExp类型来支持正则表达式. var expression = / pattern / flag ; pattern可以是任意的正则表达式.每个正则都带有标志,用以正则表达式的行为.正则的匹配模式支持三个标志: g:表示全局(global)模式,即模式被应用于所有字符串,而非在发现第一个匹配是立即停止: i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写: m:表示多行(multiline)模式,即在到达一行文本末

【JS笔记】5.4 RegExp类型

RegExp类型包含信息:模式和标志 创建RegExp对象: 方法一: 字面量形式 var expression = /pattern/flags; flags: g:全局模式,模式将被应用于所有字符串,而非发现第一个匹配项时停止 i:不区分大小写(ignorecase) m:(multiline)多行模式,到达一行文本末尾时还会继续查找下一行 方法二: RegExp(patternString[, flagsString])构造函数 var pattern2 = new RegExp("\\[

JavaScript:RegExp类型

JavaScript通过RegExp类型来支持正则表达式.语法: var exepression = /pattern/flags; 其中,pattern可以任意的正则表达式,可以包含字符类.限定符.分组.向前查找以及反向引用.每一个正则表达式都可带一个或多个标志,用于标明正则表达式的行为. g:表示全局模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止 i:表示不区分大小写模式,即在匹配项时忽略模式与字符串的大小写 m:表示多行模式,即到达一行文本末尾时还会继续查找下一行是否存

javascript类型系统——正则表达式RegExp类型

× 目录 [1]对象 [2]实例属性 [3]静态属性[4]实例方法 前面的话 前面已经介绍过javascript中正则表达式的基础语法.javascript的RegExp类表示正则表达式,String和RegExp都定义了方法,使用正则表达式可以进行强大的模式匹配和文本检索与替换.本文将介绍正则表达式的RegExp对象,以及正则表达式涉及到的属性和方法 对象 javascript中的正则表达式用RegExp对象表示,有两种写法:一种是字面量写法:另一种是构造函数写法 Perl写法 正则表达式字面

JavaScript引用类型之RegExp类型(正则表达式)

ECMAScript中使用RegExp来支持正则表达式.使用下面类似Perl的语法,就可以创建一个正则表达式. var expression=/pattern/flags; 如上代码: pattern   ---pattern部分可以是任何简单或复杂的正则表达式,可以包含字符类.限定符.分组.向前查找以及反向引用. falgs       ---每个正则表达式都可带有一个或多个标志(flags),用于标明正则表达式的行为; 以下是正则表达式的匹配模式所支持的3个标志: g : 表示全局模式,即模

JS高级程序设计学习笔记之RegExp类型

创建正则表达式: 字面量形式定义正则表达式: Var expression = / pattern /flags ;pattern部分可以使任意简单或复杂的正则表达式.每个正则表达式可以带有一个或多个标志. 标志为:①g,表示全局模式.②i,表示不区分大小写.③m,表示多行模式 正则表达式的元字符包括:( [ { \ ^ $ | ? * + . } ] ).注意:模式中使用的所有元字符必须经过转义(使用 \ 符号). 使用RegExp构造函数: Var pattern = new RegExp(