exec()

RegExp的主要方法是exec(),该方法专门是为捕获组设计的。exec接收一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回 null。

返回的数组虽然是 Array 的实例,但包含两个额外的属性:index 和 input。其中,index 表示匹配项在字符串中的位置,而 input 表示应用正则表达式的字符串。

在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)。

请看下面的例子。

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"

这个例子中的模式包含两个捕获组。最内部的捕获组匹配"and baby",而包含它的捕获组匹配"and dad"或者"and dad and baby"。当把字符串传入exec()方法中之后,发现了一个匹配项。因为整个字符串本身与模式匹配,所以返回的数组 matchs 的 index 属性值为 0。数组中的第一项是匹配的整个字符串,第二项包含与第一个捕获组匹配的内容,第三项包含与第二个捕获组匹配的内容。

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

var text = "cat, bat, sat, fat";
var pattern1 = /.at/;
var matches = pattern1.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //0
matches = pattern1.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //0var pattern2 = /.at/g;
var matches = pattern2.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern2.lastIndex); //3
matches = pattern2.exec(text);
alert(matches.index); //5
alert(matches[0]); //bat
alert(pattern2.lastIndex); //8

这个例子中的第一个模式pattern1不是全局模式,因此每次调用 exec()返回的都是第一个匹配项("cat")。而第二个模式 pattern2 是全局模式,因此每次调用exec()都会返回字符串中的下一个匹配项,直至搜索到字符串末尾为止。此外,还应该注意模式的 lastIndex属性的变化情况。在全局匹配模式下,lastIndex 的值在每次调用exec()后都会增加,而在非全局模式下则始终保持不变。

转载于:https://www.cnblogs.com/cherishSmile/p/11102491.html

JavaScript的RegExp实例方法exec()相关推荐

  1. javascript里面RegExp的exec函数的总结

    2019独角兽企业重金招聘Python工程师标准>>> 在我们的前端里面,经常会用到正则表达式进行检索字符串,刚好javascript里面提供RegExp来支持正则表达式,而RegE ...

  2. Javascript之RegExp

    RegExp对象的构造器 new RegExp(pattern[, flags]) pattern 正则表达式文本 flags 该参数可以是下面几个值的任意组合: g 全局匹配 i 忽略大小写 m 让 ...

  3. JavaScript通过RegExp实现客户端验证

    1.让文本框只允许输入数字,运用asp.net mvc3.0的文本框控件. @Html.TextBox("txt",null, new {@style="width:30 ...

  4. JavaScript 正则表达式(RegExp对象、属性、方法、String支持)

    内容来源:JavaScript RegExp 对象参考手册    http://www.w3school.com.cn/js/jsref_obj_regexp.asp RegExp 对象 RegExp ...

  5. JavaScript中RegExp.$1是什么意思

    RegExp 是javascript中的一个内置对象.为正则表达式. RegExp.$1是RegExp的一个属性,指的是与正则表达式匹配的第一个 子匹配(以括号为标志)字符串, 以此类推,RegExp ...

  6. RegExp类型exec()方法的返回值说明

    之前看别人写的插件经常会用到RegExp对象来验证输入,并且获取一些那时我并不晓得是什么东西的数组,来取值进行自定义的逻辑处理.今天学习了一下RegExp类型.终于有了一个初步的了解,至少不会看一会就 ...

  7. 彻底搞懂javascript中的match, exec的区别

    在工作中经常发现一些同学把这两个方法搞混,以致把自己弄的很郁闷.所以我和大家一起来探讨一下这两个方法的奥妙之处吧. 我们分以下几点来讲解: 相同点: 1.两个方法都是查找符合条件的匹配项,并以数组形式 ...

  8. JavaScript正则表达式----RegExp类型, 代码说明简单易懂

    RegExp 正则表达式定义 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具.匹配原则: 贪婪匹配 直接量语法 /pattern(匹配规则)/attributes(属性) 创建 ...

  9. JavaScript - 正则(RegExp)判断文本框中是否包含特殊符号

    前言 有时,我们希望判断文本框中用户输入的字符是否含有特殊符号(*/#$@),就像用户注册时密码框的填写. demo 利用 RegExp 对象,能很优雅的实现以上需求: // even(文本框内容) ...

  10. JavaScript正则表达式 RegExp验证手机号码

    直接上代码 <div class="phone"><input type="text" id="phone">< ...

最新文章

  1. forkjoin rxjs_如何通过吃披萨来理解RxJS运算符:zip,forkJoin和Combine
  2. 整理第十六届全国大学智能车竞赛比赛数据
  3. 华为路由器qos car+nat+dhcp+vlan配置心得
  4. OSChina 娱乐弹弹弹——Team,对你爱爱爱不完
  5. 用数据库的方式编辑上一页 下一页
  6. Debug的使用方法
  7. C语言实验课基础考点1.0
  8. socket函数send和recv函数
  9. r语言计算行列式的值
  10. 第一个包不是SYN包?用科来数据包分析软件排除一次故障。
  11. Python游戏开发,pygame模块,Python实现记忆翻牌小游戏
  12. 谓词函数和谓词函数对象_称为形容词的函数
  13. 如何将旧手机soul聊天记录导入到新手机中
  14. 整理的最新版的K8S安装教程,看完还不会,请你吃瓜
  15. Hystix、Feign、Zuul网关
  16. 沈丘县司法局法治进校园金秋第一堂法治课
  17. j2ee常用工作流比较(shart、osworkflow、jbpm)
  18. python小象学院: BMR------ 基础代谢率1.0
  19. 设计一个秒杀系统之削峰填谷
  20. 淘口令是什么?淘口令怎么在电脑上打开?【已解决】

热门文章

  1. python右对齐函数_Python这68个内置函数,建议你吃透!
  2. Prototype使用Hash对象
  3. Struts2校验器(二)之注解
  4. 基于强化学习的倒立摆控制策略Matlab实现(附代码)
  5. 矩阵分析 (八) 矩阵的直积
  6. ubuntu16.04下ROS操作系统学习笔记(三 / 一)ROS基础-工作空间
  7. 针对form表单赋值封装
  8. require-ensure
  9. 【转】十八个绝招把你从压力中营救出来
  10. 扩展 MongoDB.Driver 支持实体