• difference between match and exec


    http://www.cnblogs.com/tinkbell/p/4563688.html

    在工作中经常发现一些同学把这两个方法搞混,以致把自己弄的很郁闷。所以我和大家一起来探讨一下这两个方法的奥妙之处吧。

    我们分以下几点来讲解:

    相同点:

    1.两个方法都是查找符合条件的匹配项,并以数组形式返回。
    2.当没有找到匹配项时,都返回null。
    3.当正则表达式包含子表达式且不包含全局标志g时,二者返回相同的数组。

    示例:

    var str = 'cat10,bat20,kat30';
    var patten = /w(at)d+/;
    var arr = str.match(patten);
    arr[0] <=> ['cat10']
    arr[1] <=> ['at']

    var arr = patten.exec(str);
    arr[0] <=> ['cat10']
    arr[1] <=> ['at']

    区别:

    1.match是字符串的方法,exec是RegExp对象的方法

    示例:

    var str = 'cat,bat,kat';
    var patten = /at/;
    str.match(patten); //at
    patten.exec(str); //at

    2.当正则表达式带有全局标志g时,二者表现不一致。

    match会返回所有符合条件的匹配项,并以数组形式返回。数组第一项存放第一个匹配项,数组第二项存放第二个匹配项...依次类推。

    exec则永远返回第一个匹配项。但是当连续调用exec时,则每次的返回值都是下一个匹配项。

    示例1:

    var str = 'cat,bat,kat';
    var patten = /at/g;
    str.match(patten); //['at', 'at', 'at']
    patten.exec(str); //['at']

    示例2:

    var str = 'cat,bat,kat';
    var patten = /w+/g;
    str.match(patten); //['cat', 'bat', 'kat']

    //第一次调用
    patten.exec(str); //['cat']
    //第二次调用
    patten.exec(str); //['bat']
    //第三次调用
    patten.exec(str); //['kat']

    3.当正则表达式包含子表达式时且包含全局标志g时,二者表现不一致。

    match会返回所有符合条件的匹配项,并以数组形式返回。这时,match不会再返回子表达式的匹配项了。数组第一项存放第一个匹配项,数组第二项存放第二个匹配项...依次类推。
    exec会返回子表达式的匹配项。换句话说就是,数组第一项存放整个匹配项,数组第二项存放第一个子表达式匹配项,数组第三项存放第二个子表达式匹配项...依次类推。

    示例:

    var str = 'cat10,bat20,kat30';
    var patten = /w(at)d+/g;
    var arr = str.match(patten); //['cat10', 'bat20', 'kat30']
    var arr = patten.exec(str);
    arr[0] <=> ['cat10']
    arr[1] <=> ['at']

  • 相关阅读:
    坚持
    随笔
    C++:对象和类
    STEP7 V14 安装和激活
    c++:cout
    C 格式化字符串处理函数
    WIn:消极处理机制
    Python:requests发送json格式数据
    Python:logging日志功能的基本使用
    PLC:西门子测试
  • 原文地址:https://www.cnblogs.com/skating/p/6293109.html
Copyright © 2020-2023  润新知