千家信息网

引用类型-RegExp类型

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,JavaScript高级程序设计(第三版)笔记-第五章-RegExp类型定义正则表达式有两种方式1、用字面量形式定义正则表达式:ver expression = /patterns/flags;pat
千家信息网最后更新 2026年10月31日引用类型-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);  //falsealert(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); //0alert(matches[0]); //catalert(pattern1.lastIndex); //0 matches = pattern1.exex(text);alert(matches.index); //0alert(matches[0]); //catalert(pattern1.lastIndex); //0var pattern2 = /.at/g;var matches = pattern2.exex(text);alert(matches.index); //0alert(matches[0]); //catalert(pattern1.lastIndex); //3matches = pattern1.exex(text);alert(matches.index); //5alert(matches[0]); //batalert(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存储第一个捕获组,以此类推。


字符 表达式 正则 字符串 实例 属性 函数 方法 标志 模式 参数 大小 元字符 全局 转义 相同 一行 两个 位置 信息 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技股 科技互联网项目 互联网科技金融公司 西安互联网科技 百单互联网科技有限公司 互联网科技的未来发展 哈尔滨新华互联网科技 互联网公司会议桌创意科技软装饰 互联网汽车科技小镇 北京华百购互联网科技有限公司 银川新华互联网科技职业技术培训学校图片 开一家科技互联网公司需要多少钱 如何创新互联网科技 中国互联网公司排名锤子科技 卓翼科技产业互联网合作 张召忠谈中国互联网科技 富国互联网科技002692 湖北辰鑫科技互联网 互联网金融运营模式中的金融科技 好易买互联网科技 耶加雪菲 广州淘业互联网络科技 中关村互联网 科技集团 北京路客互联网科技有限公司 善班互联网科技 奇酷互联网科技公司 青岛科技大学互联网大赛研究生 神州科技互联网有限公司 九思连强互联网电子科技有限公司 福仕德教育科技互联网
0