1. RegExp对象

1.1. RegExp对象表示正则表达式, 它是对字符串执行模式匹配的强大工具。

1.2. 字面量语法

/pattern/attributes;

1.3. 创建RegExp对象的语法:

new RegExp(pattern, attributes);

1.4. 参数

1.4.1. 参数pattern是一个字符串或正则表达式。

1.4.2. 参数attributes是一个可选的字符串, 包含属性"g"、"i"和"m", 分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript标准化之前, 不支持m属性。如果pattern是包含修饰符的正则表达式, 则必须省略该参数。

1.5. 返回值

1.5.1. 一个新的RegExp对象, 具有指定的模式和标志。如果参数pattern是正则表达式而不是字符串, 那么RegExp()构造函数将用与指定的RegExp相同的模式和标志创建一个新的RegExp对象。

1.5.2. 如果不用new运算符, 而将RegExp()作为函数调用, 那么它的行为与用new运算符调用时一样, 只是当pattern是正则表达式时, 它只返回pattern, 而不再创建一个新的RegExp对象。

1.6. 尽管可以使用RegExp构造函数创建正则表达式, 但最好不要使用它, 因为使用构造函数比字面量创建正则表达式要慢得多。

2. RegExp对象属性

3. RegExp对象方法

4. test()方法

4.1. test()方法用于检测一个字符串是否匹配某个模式。

4.2. 语法

regExpObject.test(string)

4.3. 参数

4.4. 返回值

4.4.1. 如果字符串string中含有与RegExpObject匹配的文本, 则返回true, 否则返回false。

5. exec()方法

5.1. exec()方法用于检索字符串中的正则表达式的匹配。

5.2. 语法

regExpObject.exec(string)

5.3. 参数

5.4. 返回值

5.4.1. 返回一个数组, 其中存放匹配的结果。如果未找到匹配, 则返回值为null。

5.5. 如果exec()找到了匹配的文本, 则返回一个结果数组。否则, 返回null。此数组的第0个元素是与正则表达式相匹配的文本, 第1个元素是与RegExpObject的第1个子表达式相匹配的文本(如果有的话), 第2个元素是与RegExpObject的第2个子表达式相匹配的文本(如果有的话), 以此类推。除了数组元素和length属性之外, exec()方法还返回两个属性。index 属性声明的是匹配文本的第一个字符的位置。input属性则存放的是被检索的字符串string。我们可以看得出, 在调用非全局的RegExp对象的exec()方法时, 返回的数组与调用方法String.match() 返回的数组是相同的。

5.6. 但是, 当RegExpObject是一个全局正则表达式时, exec()的行为就稍微复杂一些。它会在RegExpObject的lastIndex属性指定的字符处开始检索字符串string。当exec()找到了与表达式相匹配的文本时, 在匹配后, 它将把RegExpObject的lastIndex属性设置为匹配文本的最后一个字符的下一个位置。这就是说, 您可以通过反复调用exec() 方法来遍历字符串中的所有匹配文本。当exec()再也找不到匹配的文本时, 它将返回null, 并把lastIndex属性重置为0。

5.7. 如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串, 就必须手动地把lastIndex属性重置为0。

5.8. 请注意, 无论RegExpObject是否是全局模式, exec()都会把完整的细节添加到它返回的数组中。这就是exec()与String.match()的不同之处, 后者在全局模式下返回的信息要少得多。因此我们可以这么说, 在循环中反复地调用exec()方法是唯一一种获得全局模式的完整模式匹配信息的方法。

6. 例子

6.1. 代码

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title>RegExp对象</title></head><body><script type="text/javascript">var re1 = new RegExp(/\s/);var r1 = re1.test('1\v2');document.write('\\s匹配垂直制表符: ' + r1 + ', global = ' + re1.global + ', ignoreCase = ' + re1.ignoreCase + ', multiline = ' + re1.multiline + ', source = ' + re1.source + '<br />');var re2 = new RegExp(/\s/i);var r2 = re2.test('1\f2');document.write('\\s匹配换页符: ' + r2 + ', global = ' + re2.global + ', ignoreCase = ' + re2.ignoreCase + ', multiline = ' + re2.multiline + ', source = ' + re2.source + '<br />');var re3 = new RegExp(/\s/g);var r3 = re3.test('1\t2');document.write('\\s匹配制表符: ' + r3 + ', global = ' + re3.global + ', ignoreCase = ' + re3.ignoreCase + ', multiline = ' + re3.multiline + ', lastIndex = ' + re3.lastIndex + ', source = ' + re3.source + '<br />');var re4 = new RegExp(/\s/m);var r4 = re4.test('1\r2');document.write('\\s匹配回车符: ' + r4 + ', global = ' + re4.global + ', ignoreCase = ' + re4.ignoreCase + ', multiline = ' + re4.multiline + ', source = ' + re4.source + '<br />');var re5 = new RegExp(/\s/, 'i');var r5 = re5.test('1\n2');document.write('\\s匹配换行符: ' + r5 + ', global = ' + re5.global + ', ignoreCase = ' + re5.ignoreCase + ', multiline = ' + re5.multiline + ', source = ' + re5.source + '<br />');var re6 = new RegExp(/\s/, 'g');var r6 = re6.test('1 2');document.write('\\s匹配空格: ' + r6 + ', global = ' + re6.global + ', ignoreCase = ' + re6.ignoreCase + ', multiline = ' + re6.multiline + ', lastIndex = ' + re6.lastIndex + ', source = ' + re6.source + '<br />');var re7 = new RegExp(/\s/, 'm');var r7 = re7.test('1 2');document.write('\\s匹配tab键: ' + r7 + ', global = ' + re7.global + ', ignoreCase = ' + re7.ignoreCase + ', multiline = ' + re7.multiline + ', source = ' + re7.source + '<hr />');var str1 = 'Ruan jian bao dian wang fu wu yu 100 duo suo gao xiao, 200000 duo wan de gao xiao xue sheng he lao shi, yi gong you 30 duo wan yong hu le。';var result = null;var m1 = str1.match(/\d+/);document.write('匹配结果: ' + m1 + ', 匹配位置: ' + m1.index + ', 原字符串: ' + m1.input + '<br />');var mre1 = new RegExp(/\d+/, 'g')var m2 = str1.match(mre1);document.write('匹配结果: ' + m2 + ', global = ' + mre1.global + ', ignoreCase = ' + mre1.ignoreCase + ', multiline = ' + mre1.multiline + ', source = ' + mre1.source + '<hr />');// 只有new RegExp()返回的对象, 执行检测后才有global, ignoreCase, multiline属性var e1 = /\d+/.exec(str1);document.write('匹配结果: ' + e1 + ', 匹配位置: ' + e1.index + ', 原字符串: ' + e1.input + '<br />');var e2 = /\d+/g.exec(str1);document.write('匹配结果: ' + e2 + ', 匹配位置: ' + e2.index + ', 原字符串: ' + e2.input + '<hr />');// 全局匹配使用exec()方法, 循环调用打印所有匹配结果。var ere1 = new RegExp(/\d+/, 'g')while((result = ere1.exec(str1)) != null) {document.write('匹配结果: ' + result + ', 匹配位置: ' + result.index + ', 原字符串: ' + result.input + ', 下一次开始匹配的位置: ' + ere1.lastIndex + '<br />');}var sre1 = new RegExp('ruan jian', 'igm');var s1 = 'Ruan jian bao dian, ruan jian ke ji'.match(sre1);document.write('<hr />匹配结果: ' + s1 + ', global = ' + sre1.global + ', ignoreCase = ' + sre1.ignoreCase + ', multiline = ' + sre1.multiline + ', source = ' + sre1.source);</script></body>
</html>

6.2. 效果图

095_RegExp对象相关推荐

  1. java_B站_面试题

    Java面向对象有哪些特征,如何应用 ​ 面向对象编程是利用类和对象编程的一种思想.万物可归类,类是对于世界事物的高度抽象 ,不同的事物之间有不同的关系 ,一个类自身与外界的封装关系,一个父类和子类的 ...

  2. 史上最详细的23中设计模式解析,一个不落,理论搭配简单案例,更好理解哦

    目录 一.软件设计模式的产生背景 二.软件设计模式的概念与意义 1. 软件设计模式的概念 2. 学习设计模式的意义 三.23 种设计模式的分类和功能 1. 根据目的来分 2. 根据作用范围来分 3. ...

  3. 在kotlin companion object中读取Bean,注入Bean对象

    在kotlin companion object中读取Bean,注入Bean对象 在使用kotlin时,或多或少地会使用到一些公共组件,如 http. mongo. redis相关的组件.   使用组 ...

  4. IDEA自动生成对象所有set方法

    idea中有一款插件能够生成对象所有的set方法,GenerateAllSetter :下载地址 步骤1:将下载好的压缩包放在自己记得的文件夹中,在idea中进行导入 步骤2:在本地选中刚才的压缩包, ...

  5. 基于Golang的对象序列化的程序包开发——myJsonMarshal

    基于Golang的对象序列化的程序包开发--myJsonMarshal[阅读时间:约10分钟] 一.对象序列化概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体程序设计及 ...

  6. java 捕获异常并存入数据库_java异常处理,报异常的话怎么处理对象值,并持久化到数据库中...

    展开全部 //没看到有人回e68a843231313335323631343130323136353331333365646233答你,我还没学到框架,不知道那个是不是可以很便捷操作你说的这样过程 / ...

  7. python程序如何执行死刑图片_如何判断对象已死

    已死的对象就是不可能被任何途径使用的对象,有以下几种方法判断一个对象是否已经死了: 引用计数 给对象添加一个引用计数器,每当有一个地方引用他,计算器就加 1:当引用失效时,计数器减 1:任何时刻计数器 ...

  8. Go 学习笔记(64)— Go error.New 创建接口错误对象、fmt.Errorf 创建接口错误对象、errors.Is 和 errors.As

    1. error 接口定义 除用 panic 引发中断性错误外,还可返回 error 类型错误对象来表示函数调用状态.error 接口是 Go 原生内置的类型,它的定义如下: // $GOROOT/s ...

  9. OpenCV 笔记(06)— Mat 结构、像素值存储方法、创建 Mat 对象各种方法、Mat 对象的运算

    数字图像中的每个点都称为像素(对于图像元素),并且每个像素可以存储一个或多个值,这取决于它是否是仅存储一个值的黑白图像(也称为二进制图像,比如只存储0或1),还是存储两个值的灰度图像,或者是存储三个值 ...

最新文章

  1. wcf客户端捕获异常
  2. torch.nn.Linear 笔记
  3. C#——《C#语言程序设计》实验报告——面向对象程序设计——字符串加密
  4. BZOJ 3237: [Ahoi2013]连通图
  5. 内存的静态分配和动态分配的区别【转】
  6. 一文看懂深度学习——人工智能系列学习笔记
  7. JavaWeb重要知识点总结
  8. HTTP2还没用上,HTTP3就出来了
  9. 【洛谷 SP8093】 JZPGYZ - Sevenk Love Oimaster(后缀自动机)
  10. wps2019计算机里的云盘,WPS2019云文档如何使用?
  11. FPAG—UART串口实现与解析-黑金fpga资料解析
  12. adobe animate2022动画制作软件
  13. 隐私模型:k-anonymity l-diversity t-closeness介绍
  14. java 热度算法_Raddit算法Java实现
  15. 自制hdmi线一头改vga图_破拆电脑VGA电缆以制作收音机天线零件:双目铁氧体磁芯...
  16. linux博通bcm4313无线网卡,在Deepin 15.7系统中解决BCM4313无线网卡网速慢的问题
  17. 小飞鱼通达二开 通过开发工作流接口集成ERP系统(图文)
  18. 《数据结构与抽象:Java语言描述(原书第4版)》一P.2.2 前置条件和后置条件...
  19. css:hover改变另一个元素的样式
  20. 英语四级作文万能模板汇总

热门文章

  1. Objective-C中常用转义字符
  2. 数据仓库入门(实验7)部署分析服务数据库
  3. 通过命令行启动 Microsoft File Transfer Manager
  4. 关于DiscuzNT 1.0
  5. elasticsearch hbase
  6. vtigercrm安装
  7. Linux下command not found(以CentOS下没有telnet为例)
  8. centos 6.5安装VMware tools
  9. .NET C#语言基础 20140814
  10. Hadoop fs命令详解