最近在看某知名js框架的源码,突然间发现自己对exec()方法竟然不太理解,然后就仔细的分析了一下这个方法

下面贴个exec()方法使用的代码出来

rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;
match = rquickExpr.exec( selector );

exec() 方法就是用来检索字符串中正则表达式的匹配,如果匹配到了那么就返回一个存放有结果的数组,如果没有匹配到就返回一个null

(个人感觉这个方法和php里面的preg_match特别像啊~O(∩_∩)O哈哈~)

exec() 方法使用起来比test方法和String对象的match方法要复杂的多

在这里说一下test方法和String对象的match方法

test()用于检测一个字符串是否匹配某个模式,也是一个正则匹配的方法,但是test()方法只会返回有没有匹配到规定的字符串,匹配到了就返回true。没有那么就返回false。

match()方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

match和test的区别在于它可以直接检测字符串中是不是含有某个值,而不需使用正则表达式,第二个区别就是match函数可以进行一次或多次模式匹配,将匹配结果按照一个数组进行返回。(使用单次匹配还是多次匹配这取决于在匹配模式中是否含有g,我自己感觉没有g的就相当于php里面的preg_match函数,有的就相当于preg_match_all函数,哈哈)

exec方法返回的数组的第 0 个元素是与正则表达式相匹配的文本

  第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话)

  第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话)

  ...

  以此类推。

除了数组元素和 length 属性之外,exec() 方法还返回两个属性。

  index 属性声明的是匹配文本的第一个字符的位置。

  input 属性则存放的是被检索的字符串 string。

我们可以看得出,在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。

但是,当 RegExpObject 是一个全局正则表达式时,exec() 的行为就稍微复杂一些。

它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。

当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。

lastIndex属性的意思就是当前匹配的字符串的最后一个字符的位置,比如说要在"abcdefg"中匹配"bcd",那么第一次匹配完成后的lastIndex就是4~

这就是说,你可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。

当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。

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

JavaScript:exec()方法的用法及说明的更多相关文章

  1. javascript exec方法

    题目 取出 "[大哭][尴尬][发怒][发怒][调皮][调皮][呲牙]" 串中[]里面的东西 思路 正则匹配,/\[(.+?)\]/ig; exec方法循环 exec() 方法的功 ...

  2. JavaScript exec()方法

    exec() 方法用于检索字符串中的正则表达式的匹配.返回一个数组,其中存放匹配的结果.如果未找到匹配,则返回值为 null. var str = "我今年25岁明年26岁后年27岁千年24 ...

  3. JavaScript RegExp.exec() 方法

    定义和用法: exec() 方法用于检索字符串中的正则表达式的匹配. 语法: RegExpObject.exec(string); RegExpObject:必须参数,正则表达式: string:必须 ...

  4. JS中正则匹配的三个方法match exec test的用法

    javascript中正则匹配有3个方法,match,exec,test: match是字符串的一个方法,接收一个RegExp对象做为参数: match() 方法可在字符串内检索指定的值,或找到一个或 ...

  5. JavaScript RegExp对象的exec()方法

    JavaScript RegExp对象的exec()方法用来匹配字符串,它的行为与match()有些不同. 对于RegExpObject.exec(),w3school上面是这样介绍的: exec() ...

  6. 在HTML页面中实时获取新消息的方法 “JavaScript中的setInterval用法”

    JavaScript中的setInterval用法(资料来源:博主---八神吻你   ) setInterval动作的作用是在播放动画的时,每隔一定时间就调用函数,方法或对象.可以使用本动作更新来自数 ...

  7. JavaScript中String的math方法与RegExp的exec方法的区别

    1.exec是正则表达式的方法,方法参数为字符串.match为字符串的方法,参数为正则表达式对象. 2.match与exec都返回数组.如果调用exec方法的正则表达式没有分组内容,则返回第一个匹配的 ...

  8. JavaScript——exec和match

    题目17:Read the following javascript code: var someText="web2.0 .net2.0";var pattern=/(\w+)( ...

  9. JavaScript test() 方法

    JavaScript test() 方法 JavaScript RegExp 对象 定义和用法 test() 方法用于检测一个字符串是否匹配某个模式. 语法 RegExpObject.test(str ...

随机推荐

  1. opennebula 出错截图与调试

  2. 解决 Cocos2d-x 中 Android.mk 手动添加源文件

    转自:http://blog.csdn.net/ypfsoul/article/details/8909178 Makefile Android.mk 引发的思索 在我们编写 Android 平台 c ...

  3. OpenCV 图像处理学习笔记(一)

    解读IplImage结构 typedef struct _IplImage { int nSize;                    /* IplImage大小 */ int ID;       ...

  4. HITAG 1/2/S

    HITAG S -- 3rd generation HITAG™ family Modulation Read/Write Device to Transponder: 100 % ASK and B ...

  5. 微价值:专訪《甜心爱消除》个人开发人员Lee,日入千元!

    [导语]我们希望能够对一些个人开发人员进行专訪,这样大家更能显得接地气,看看人家做什么,怎么坚持.<甜心爱消除>作者Lee是三群的兄弟,也关注微价值.微价值的文章还是能够的,得到一些业内大 ...

  6. Codeforces Round #245 (Div. 1) 429D - Tricky Function 最近点对

    D. Tricky Function Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 codeforces.com/problemset/problem/42 ...

  7. 谷歌技术&quot;三宝&quot;之MapReduce

    江湖传说永流传:谷歌技术有"三宝",GFS.MapReduce和大表(BigTable)! 谷歌在03到06年间连续发表了三篇非常有影响力的文章,各自是03年SOSP的GFS,04 ...

  8. 一步步学Mybatis-实现多表联合查询(4)

    上一章节中我们已经完成了对单表的CRUD操作,接下来今天这一讲讲述的是关于Mybatis在多表查询时候的应用,毕竟实际业务中也是多表的联合查询比较多嘛~ 还记得最一开始我们新建过一张Website表吗 ...

  9. Android开发代码混淆经验(Eclipse)

    为了防止自己的劳动成果被别人窃取,混淆代码能有效防止被反编译,下面来总结以下混淆代码的步骤: 2.编辑项目下的proguard-project.txt,添加不需要混淆的规则(model.泛型.反射.第 ...

  10. [Javascript] Promise-based functions should not throw exceptions

    Source You can also start a chain of then() method calls via Promise.resolve() and execute the synch ...