RegExp.prototype.exec()方法

正则表达式的exec()方法需要需要传入一个字符串作为他的参数,执行完这个方法后,会返回一个数组,数组的第一个元素是匹配到的字符,第二个元素是第一个子表达式匹配到的字符(如果有的话),第三个元素是第二个子表达式匹配到的字符(如果有的话),依次类推···

举例:

var reg1 = /\d(\w)(\w)\d/

var ts = '@1av43rt64fu8'

var ret = reg1.exec(ts)  // 返回的结果数组为:["1av4","a","v"]

因为reg1的匹配模式是非全局的,所以这个方法无论执行多少次都返回同样的结果数组。

需要说明的是,这个方法除了返回一个结果数组外,这个结果还有两个隐藏的属性:index和input;

index表示匹配到的字符中的首字符在元字符串中的位置,input表示元字符串;

接着上面的代码写

var index = ret.index // 返回1,因为匹配到的字符“1av4”中的首字符“1”在元字符串“@1av43rt64fu8”中的位置为1.

var input = ret.input //返回元字符串:‘@1av43rt64fu8’


上面例子中写到的正则表达式的匹配模式是非全局的,下面写一下

全局匹配模式的正则表达式的exec()方法:


var reg2 = /\d(\w)(\w)\d/g

var ts = '@1av43rt64fu8'

var ret1 = reg2.exec(ts)  // 返回的结果数组为:["1av4","a","v"]

ret1.index // 1


然后我们再次对ts执行exec()方法

ret2 = reg2.exec(ts) //返回的结果数组为:["3rt6","r","t"]

ret2.index // 5

由于在全局匹配模式下,正则表达式会接着上次匹配的结果继续匹配新的字符串

所以这种情况下,正则表达式本身又有了一个新的属性:lastIndex,它指向这一次匹配到的字符串的末尾字符下一个字符,如果我们在第一次执行exec方法的时候,再加上一行代码:

reg2.lastIndex;    //  返回结果为 5,因为匹配到的结果“1av4”的末尾字符“4”的下一个字符是“3”,他的位置是5

如果我们在第二次执行exec方法的时候,再加上一行代码:

reg2.lastIndex;    //  返回结果为 9,因为匹配到的结果"3rt6"的末尾字符“6”的下一个字符是“4”,他的位置是9

以上就是正则表达式的exec()方法的大概介绍。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,771评论 0 4
  • 转自: JS正则表达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路 温馨提示:文章很长...
    前端渣渣阅读 5,811评论 1 32
  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 9,545评论 0 20
  • 本章内容 使用对象 创建并操作数组 理解基本的 JavaScript 类型 使用基本类型和基本包装类型 引用类型的...
    闷油瓶小张阅读 3,984评论 0 0
  • 抽空自测了一下和老公的关系,得分28分,是基本健康的。 回忆起我们在一起的时光,前几年是我们关系最...
    我是大心阅读 1,157评论 0 1

友情链接更多精彩内容