match 和 exec 主要有两点不同:

1.exec是正则表达式的方法,而不是字符串的方法,它的参数才是字符串,如下所示:

var re=new RegExp(/\d/);

re.exec( "abc4def" );

或者使用perl风格:

/\d/.exec( "abc4def" );

match才是字符串类提供的方法,它的参数是正则表达式对象,如下用法是正确的:

"abc4def".match(\d);

或者

"abc4def".match("abc");

2.exec和match返回的都是数组

  • 执行exec方法的正则表达式没有分组,那么如果有匹配,他将返回一个只有一个元素的数组;如果没有匹配则返回null。
  • exec 不支持 i m g

下面两个alert函数弹出的信息是一样的:

var str= "cat,hat" ;
var p=/at/; //没有g属性
alert(p.exec(str)) //["at"]
alert(str.match(p)) //["at"]

这时exec和match 方法相等

var str= "cat,hat" ;
var p=/at/g; //注意g属性
alert(p.exec(str)) //["at"]
alert(str.match(p)) //["at","at"]

因为exec永远只返回第一个匹配,而match在正则指定了g属性的时候,会返回所有匹配。

3.exec如果找到了匹配,而且包含分组的话,返回的数组将包含多个元素,第一个元素是找到的匹配,之后的元素依次为该匹配中的第一、第二...个分组(反向引用)
如下的代码将弹出"cat2,at":

var str= "cat2,hat8" ;
var p=/c(at)\d/;
alert(p.exec(str)) //["cat2","at"]

match函数在满足如下条件下将越俎代庖,实现和exec一样的功能:

  • 1、正则表达式中含有分组(括号)
  • 2、返回唯一的匹配 ,不使用 g,m时候
var str= "cat2,hat8" ;
var p=/c(at)\d/;
alert(p.exec(str)) //["cat2","at"]
alert(str.match(p)) //["cat2","at"]
var p=/c(at)\d/g;alert(str.match(p))//["cat2","at"]

4. 分组匹配, (?:) 不参与分组

var regis=/^(?:[a-z]+(\d)|(#))$/;

regis.exec("ab2")  //["ab2","2",undefined]

regis.exec("#") //["#",undefined,"#"] ,注意 "ab#" 返回的是 null

有两个分组,(\d)和 (#),虽然用 | 分隔,但是两个都参与分组

总结:

exec 永远返回的是第一个匹配的元素,如果分组其返回数组包括第一个匹配的字串,以及所有分组的反向引用

match 是返回所有匹配的字符串的数组,但是正则表达式必须指定全局g属性才能返回所有匹配,不指定g属性与exec的效果相同。


  

正则表达式 match 和 exec 比较的更多相关文章

  1. 正则表达式之g标志,match和 exec

    1.g标志    g标志一般是与match和exec来连用,否则g标志没有太大的意义. 先来看一个带g标志的例子: var str = "tankZHang (231144) tank yi ...

  2. 正则表达式中的exec和match方法的区别

    正则表达式中的exec和match方法的区别 字符串的正则方法有:match().replace().search().split() 正则对象的方法有:exec().test() 1.match m ...

  3. 正则表达式之match与exec【转的 楼兰之风】

    彻底领悟javascript中的exec与match方法 阅读本文之前,请先看下面一道题: 题目17:Read the following javascript code: var someText= ...

  4. js正则表达式中test,exec,match方法的区别说明

    js正则表达式中test,exec,match方法的区别说明 test test 返回 Boolean,查找对应的字符串中是否存在模式.var str = "1a1b1c";var ...

  5. 探究js正则匹配方法:match和exec

    match是字符串方法,写法为:str.match(reg) exec是正则表达式方法,写法为:reg.exec(str) match和exec在匹配成功时返回的都是数组,在没有匹配上时返回的都是nu ...

  6. JavaScript match()方法和正则表达式match()

    先介绍参数为普通字符串的使用方式,此时match方法的返回值是存放首次匹配内容的数组.如果没有找到匹配结果,返回null.语法结构: 1 str.match(searchvalue)参数解析:(1). ...

  7. js正则表达式中test,exec,match方法的区别

    test test 返回 Boolean,查找对应的字符串中是否存在模式.var str = "1a1b1c";var reg = new RegExp("1." ...

  8. js正则函数match、exec、test、search、replace、split使用介绍集合,学习正则表达式的朋友可以参考下。

    match 方法 使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回. stringObj.match(rgExp) 参数 stringObj 必选项.对其进行查找的 String 对 ...

  9. JavaScript中正则表达式test()、exec()、match() 方法

    转自http://www.cnblogs.com/jane-y/articles/5183859.html 1.test test 返回 Boolean,查找对应的字符串中是否存在模式.var str ...

随机推荐

  1. 12-返回指针的函数&&指向函数的指针

    前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针   一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...

  2. ASP.NET MVC中Unobtrusive Ajax的妙用

    Unobtrusive Javascript有三层含义:一是在HTML代码中不会随意的插入Javsscript代码,只在标签中加一些额外的属性值,然后被引用的脚本文件识别和处理:二是通过脚本文件所增加 ...

  3. EntityFramework 数据库连接可用代码动态设定

    摘自:http://blog.csdn.net/dyllove98/article/details/9289553 数据库生成位置可控制(其实主要就是DbContext的构造函数) 1.使用DbCon ...

  4. arcTo 画 狐行

    <!DOCTYPE HTML><head> <meta charset = "utf-8"> <title>starGirl< ...

  5. ORACLE 9i 数据库体系结构图

    ORACLE 9i 的数据库体系结构图,非常的全面.系统.高屋建瓴的整体介绍了ORACLE 9i 的数据库体系结构.如果能全面了解.清晰梳理.深入掌握这些知识点,相信对你了解学习.深入研究ORACLE ...

  6. Remote table-valued function calls are not allowed

    在SQL Server中,在链接服务器中调用表值函数(table-valued function)时,会遇到下面错误: SELECT * FROM LNK_TEST.TEST.DBO.TEST(12) ...

  7. Java之TreeMap

    基本特性: 基于红黑树. 非线程安全. 同步使用: SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...))

  8. delete语句跑了3个小时分析以及关于并行的一些知识

    =====================START==================================== 闲来无事,看了下数据库跑的long running sql, SQL> ...

  9. Oozie-4.0.0-cdh5.3.6搭建

    到官网下载安装包 解压并cd到安装目录 解压目录下的 oozie-hadooplibs-4.0.0-cdh5.3.6.tar.gz  会自动解压成目录hadooplibs 创建文件夹 libext 将 ...

  10. Terminate Instance 操作详解 - 每天5分钟玩转 OpenStack(33)

    本节通过日志详细分析 Nova Terminate 操作. Terminate 操作就是删除 instance,下面是 terminate instance 的流程图 向 nova-api 发送请求 ...