引用类型-RegExp类型

JavaScript高级程序设计(第三版)笔记-第五章-RegExp类型



定义正则表达式有两种方式

1、用字面量形式定义正则表达式:

ver expression = /patterns/flags;

patterns:可以是任何简单或者复杂的正则表达式
flags:
    g:表示全局
    i:表示不区分大小写
    m:表示多行模式,在到达一行的末尾时还会继续查找下一行

var patterns1 = /at/g;//匹配字符中所有“at”的实例
var patterns2 = /[bc]at/i;//匹配所有的"bat"或"cat",不区分大小写
var patterns3 = /.at/gi;//匹配所有的以"at"结尾的三个字符的组合,不区分大小写
        

模式中使用的所有元字符都必须转义,正则表达式中的元字符包括:( [ { \ ^ $ | ) ? * + . ] }

var patterns4 = /\[bc\]at/i;//匹配第一个"[bc]at",不区分大小写

2、用RegExp构造函数定义正则表达式,他接受两个参数(patterns,flags)

var patterns2 = new RegExp("[bc]at","i");//与var patterns2 = /[bc]at/i;相同

同样使用RegExp同样也要对元字符进行转义而且是双重转义

vqr pattterns4 = new RegExp("\\[bc\\]at","i");与var patterns4 = /\[bc\]at/i;相同

这两种方法创建的正则表达式不一样。正则表达式字面量会始终共享一个RegExp实例,而使用构造函数创建的每一个新RegExp实例都是一个新实例

var re = null,
            i;
        for(i=0;i<10;i++){//只为/cat/创建了一个RegExp实例,第一次调用成功,第二是失败,因为当第二次调用时是从索引值为3的字符开始的,所以找不到他,当第三次调用时又会从开头开始。
            re = /cat/g;
            re.test("catgghi");
        }
        for(i=0;i<10;i++){//用RegExp构造函数在每次循环中都会创建正则表达式,所以每次调用test()都会返回true
            re = new RegExp("cat","g");
            re.test("catgghi");
        }

RegExp实例属性



global:是否设置了g标志
ignoreCase:是否设置了i标志
multiline:是否设置了m标志
lastIndex:表示开始搜索下一个匹配项的字符位置,从0算起
source:正则表达式的字符串表示

var patterns2 = /\[bc\]at/i;
alert(patterns2.global);  //false
alert(patterns2.source); //"\[bc\]at"

RegExp实例方法



RegExp对象的主要方法是exec(),专门为捕获组设计的,接受一个参数,返回包含匹配项信息的数组,相对于Array的实例,多了两个属性index和input,在数组中,第一项是匹配的字符串,其他项是与模式中的捕获组匹配的字符串。

input:表示应用正则表达式的字符串
index:表示匹配项在字符串中的位置

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

对于exec()方法,设置了全局标志(g),每次也只会返回一个匹配项。不设置全局标志的情况下,在同一个字符串上调用它是将始终返回第一个匹配项信息,设置了(g),每次调用它时都会在字符串中继续查找。

var text = "cat, bat, sat, fat";

var pattern1 = /.at/;

var matches = pattern1.exex(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //0

 matches = pattern1.exex(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //0

var pattern2 = /.at/g;

var matches = pattern2.exex(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //3

matches = pattern1.exex(text);
alert(matches.index); //5
alert(matches[0]); //bat
alert(pattern1.lastIndex); //8

正则表达式的第二种方法是test(),接受一个参数。在模式与该参数匹配的时返回ture,否则返回false。

RegExp构造函数属性

长属性名       短属性名               说明
input          $_       最近一次匹配的字符串
lastMatch       $&       最近一次的匹配项
lastParen        $+       最近一次匹配的捕获组
leftContext     $`       input字符串中lastMatch之前的文本
multiline     $*      布尔值,表示是否所有表达式都使用多行模式。
rightContext     $‘        input字符串中lastMatch之后的文本

var text = "this has been a short summer";
var pattern = /(.)hort/g;
if(pattern.test(text)){
            alert(RegExp.input);//(RegExp.$_)      //this has been a short summer
            alert(RegExp.leftContext);//(RegExp["$`"])   //this has been a
        }

注意:由于某些短属性名大都不是有效的ECMAScript标识符,所以要通过方括号语法来访问他们。

还有9个用于存储捕获组的构造函数属性,RegExp.$1存储第一个捕获组,以此类推。

时间: 2024-10-21 17:34:25

引用类型-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)模式,即模式将被应用于所有字符串,而非在发现第一个匹配

JavaScript引用类型RegExp

本文和大家分享的主要是javascript 的引用类型RegExp相关内容,一起来看看吧,希望对大家 学习javascript有所帮助. ·  字面量 var  reg=/\d+/g; console.log( reg.test("789456"));//true ·  构造函数 var reg2=new RegExp("\\d+","g");console.log(reg2.test("1234444456"));//tru

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:表示多行模式,即到达一行文本末尾时还会继续查找下一行是否存

RegExp类型

RegExp类型 ECMScript是通过RegExp类型来支持正则表达式. 有两种创建正则表达式的方式: (1)字面量形式: var expression=/pattern/flags; (2)使用RegExp构造函数: var expression=new RegExp("pattern","flags"); 其中,要特别注意的是在构造函数中的字符转义和字面量形式中的字符转义,稍后有提到. pattern可以是任何简单或者复杂的正则表达式,可以包含字符类.限定符

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

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

C# 数据类型 数组,引用类型 值类型

1 /*C#语法基础 2 * 1.C#程序是从Main方法开始执行.要求Main方法的返回值类型为void或int ,而且要么不带参数,要么接受一个字符串数组作为参数.当返回值是int的是状态吗,标志程序是否执行成功,返回非 3 * 0值通常意味着错误: 4 * 2.类型:是具有相似特征和行为的个体的分类: 5 * 3.一次赋值返回一个值,所以C#允许在同一条语句中连续进行多个赋值操作: 6 * 4.基元类型:8中整数类型,2种二进制浮点类型,1种金融计算的额十进制浮点类型,1种布尔类型,1种字